From c3bf590ff39eca5d884a8221b4b1196767517843 Mon Sep 17 00:00:00 2001 From: Anna Effort Date: Wed, 12 Aug 2026 18:35:32 -0700 Subject: [PATCH 1/3] header search component style adjustments Signed-off-by: Anna Effort --- src/components/layout/HeaderQuickNav.test.tsx | 10 +++-- src/components/layout/HeaderQuickNav.tsx | 41 +++++++++++-------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/components/layout/HeaderQuickNav.test.tsx b/src/components/layout/HeaderQuickNav.test.tsx index f6fbc6c..d730bd0 100644 --- a/src/components/layout/HeaderQuickNav.test.tsx +++ b/src/components/layout/HeaderQuickNav.test.tsx @@ -91,7 +91,8 @@ describe("HeaderQuickNav", () => { const input = screen.getByRole("searchbox", { name: "Search" }); expect(input).toHaveAttribute("data-expanded", "false"); - expect(screen.getByText("Ctrl K")).toBeInTheDocument(); + expect(screen.getByText("Ctrl")).toBeInTheDocument(); + expect(screen.getByText("k")).toBeInTheDocument(); fireEvent.focus(input); @@ -132,7 +133,7 @@ describe("HeaderQuickNav", () => { }); }); - it("shows the macOS shortcut symbol on Apple platforms", async () => { + it("shows the command glyph instead of Ctrl on Apple platforms", async () => { Object.defineProperty(window.navigator, "platform", { configurable: true, value: "MacIntel", @@ -140,7 +141,10 @@ describe("HeaderQuickNav", () => { renderQuickNav(); - expect(await screen.findByText("⌘ K")).toBeInTheDocument(); + await waitFor(() => { + expect(screen.queryByText("Ctrl")).not.toBeInTheDocument(); + }); + expect(screen.getByText("k")).toBeInTheDocument(); }); it("focuses the search input when the shortcut is pressed", () => { diff --git a/src/components/layout/HeaderQuickNav.tsx b/src/components/layout/HeaderQuickNav.tsx index d31d66e..4f39c11 100644 --- a/src/components/layout/HeaderQuickNav.tsx +++ b/src/components/layout/HeaderQuickNav.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import type { FormEvent, KeyboardEvent as ReactKeyboardEvent } from "react"; -import { Search } from "lucide-react"; +import { Command, Search } from "lucide-react"; import { useIntl } from "react-intl"; import { searchEntities } from "@/api/search"; import type { GlobalSearchGroup, GlobalSearchItem, SearchEntityType } from "@/api/search"; @@ -74,12 +74,12 @@ type ShortcutNavigator = Pick & { }; }; -export function getQuickNavShortcutLabel(nav: ShortcutNavigator = navigator) { +export function isAppleShortcutPlatform(nav: ShortcutNavigator = navigator) { const detectedPlatform = [nav.userAgentData?.platform, nav.platform, nav.userAgent] .filter(Boolean) .join(" "); - return /mac|iphone|ipad|ipod/i.test(detectedPlatform) ? "⌘ K" : "Ctrl K"; + return /mac|iphone|ipad|ipod/i.test(detectedPlatform); } function getString(value: unknown): string { @@ -133,7 +133,7 @@ export function HeaderQuickNav() { const { navigate } = useRouter(); const { selectedTeamId, user } = useAuthContext(); const [query, setQuery] = useState(""); - const [shortcutLabel, setShortcutLabel] = useState("Ctrl K"); + const [isApplePlatform, setIsApplePlatform] = useState(false); const [isExpanded, setIsExpanded] = useState(false); const [isPopoverOpen, setIsPopoverOpen] = useState(false); const [status, setStatus] = useState("idle"); @@ -191,7 +191,7 @@ export function HeaderQuickNav() { }, []); useEffect(() => { - setShortcutLabel(getQuickNavShortcutLabel()); + setIsApplePlatform(isAppleShortcutPlatform()); }, []); useEffect(() => { @@ -394,12 +394,12 @@ export function HeaderQuickNav() { }; return ( -
+
0)} onOpenChange={setIsPopoverOpen} > -
+ )} - /> +
{isExpanded || query.length > 0 ? null : (