Skip to content

Assess command palette mode transitions #10254

Description

@saphid

Assess and, if useful, implement restrained transitions between command/file/content search modes within the existing dialog. Preserve query/selection behavior, focus return, Escape hierarchy, keyboard speed, and reduced motion.

Requested by Alex after the T3 UI motion audit. First record an independent Astra-medium accept/revise/reject verdict with source evidence. Accepted changes should end in small focused PRs; do not implement a rejected suggestion.

Use the installed shadcn-motion-ui skill and Human Interface Craft guidelines (feedback, relationship, continuity, accessibility, signature moments). Consult current official docs, reuse local primitives, verify installed API compatibility and add exact source references. Respect native platforms, reduced motion, interruptions, responsiveness, focus, and performance. No continuous repaint loops or framework rewrites.

Acceptance:

  • Independent assessment and overlap check recorded.
  • Accepted scope implemented and focused checks pass, or rejection/dependency documented.
  • Best-effort independent cross-provider review recorded.
  • Real before/after motion evidence and PR linked, with any missing evidence disclosed as a draft-readiness gap.

Do not change live user data, the dirty primary checkout, existing Stash worktree, or unrelated work. No merge or deployment is requested.

Activity

  1. saphid commented on Sep 6, 2026

    @saphid
    ContributorAuthor

    Independent Astra-medium verdict: reject an added palette mode transition.

    At base eee05575ebd514db36f61d7eb05d2258a10c96bd, CommandPalette.tsx:538–570 preserves one Base UI dialog popup and immediately replaces command/file/content search tasks, updating its accessible label and mode. :439–448 intercepts Escape from file/content to return to commands; :550–553 returns final focus to the composer. ui/command.tsx:58–89 already uses the existing local popup and ui/dialog-styles.ts:1–5 supplies the opening/closing transition.

    A content crossfade would either retain two interactive search trees during overlap, require extra inert/focus handling, or fade in an already-focused input and results. A wait-for-exit transition delays repeated keyboard use. A tiny nonblocking entrance-only fade avoids those problems but adds decoration without explaining a demonstrated relationship; the stable popup already supplies continuity. No measured or reproduced continuity defect supports implementing it.

    Overlap checked: sidebar PRs #9431/#9424/#9967 do not own this dialog; dirty design-quality-motion-policy overlay is limited to toast/spinner/status animation and does not add palette mode transitions. Current shadcn Command and Motion layout were inspected; preserve the local Base UI composition. Human Interface Craft p10 §14/15, p11 §16, p13 §23 favor immediate repeated use and focus continuity here. No code, worktree, PR, or runtime proof claimed for this rejected suggestion.

  2. juliusmarminge commented on Sep 6, 2026

    @juliusmarminge
    Member

    Triage

    Motion-audit assessment ticket (not a user bug): should command / file / content search crossfade or otherwise animate inside the existing dialog, without changing query/selection, focus return, Escape hierarchy, keyboard speed, or reduced motion?

    Verdict: reject an added palette mode transition. The requester already recorded an independent Astra-medium reject (comment). I checked the same main (eee05575e) and agree. No code or PR.

    What already exists

    One reducer owns open + mode so the three surfaces cannot stack. The same Base UI popup stays mounted and immediately replaces the task, updating its accessible name and data-palette-mode:

    • CommandPalette.logic.ts — SearchOverlayMode is "command" | "files" | "content"; ToggleMode switches while open, or closes if the same mode is hit again
    • CommandPalette.logic.test.ts — covers switching modes without closing
    • CommandPalette.tsx — one CommandDialogPopup; children are a ternary (ProjectFilePicker / ProjectContentSearchDialog / command view), not overlapping trees
    • ui/command.tsx — local Base UI dialog popup (not a second overlay)
    • ui/dialog-styles.ts — existing 200 ms open/close scale/opacity/translate. Height is not in that list, so the content-mode h-105 snap is instant

    Escape, focus, and query behavior are already the constraints this ticket asked to preserve:

    A content crossfade would keep two interactive search trees during overlap, need extra inert/focus handling, or fade in an already-focused input. A wait-for-exit transition delays repeated ⌘K / ⌘P / ⇧⌘F use. A tiny entrance-only fade avoids those problems but adds decoration without a demonstrated continuity defect — the stable popup already supplies the relationship.

    Related work (not this ticket)

    Adjacent only: #7495 keeps dialog payload mounted through the close animation (including leaving content-search mode in place until the next open). It does not add mode-to-mode motion.

    Sidebar PRs #9431 / #9424 / #9967 do not own this dialog. Current shadcn Command is a single dialog + list composition; preserve the local Base UI Autocomplete popup rather than introducing a Motion layout handoff.

    Siblings #10248–#10255 are separate motion-audit scopes, not duplicates of this one.

    Next step

    Close as wontfix. Do not implement. Remaining acceptance items (implementation, cross-provider review, before/after captures) do not apply to a rejected addition.

  3. added
    via-triageFiled through npx t3 triage
    enhancementRequested improvement or new capability.
    wontfixThis will not be worked on
    on Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementRequested improvement or new capability.via-triageFiled through npx t3 triagewontfixThis will not be worked on

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions