From bdd5d5c5fe5862a5dc9fda9f3bba72a5946d3e0b Mon Sep 17 00:00:00 2001 From: klopez4212 Date: Fri, 12 Jun 2026 15:06:54 +0100 Subject: [PATCH 1/2] Normalize desktop icon sizing --- desktop/src/app/AppTopChrome.tsx | 39 ++++++++++++++----- .../agent-memory/ui/MemorySection.tsx | 8 ++-- .../agents/ui/AgentSessionToolItem.tsx | 4 +- .../agents/ui/AgentSessionTranscriptList.tsx | 10 ++--- .../features/agents/ui/BatchImportDialog.tsx | 6 +-- desktop/src/features/agents/ui/CopyButton.tsx | 2 +- .../agents/ui/ManagedAgentSessionPanel.tsx | 15 ++++--- .../src/features/agents/ui/ModelPicker.tsx | 4 +- .../ui/PersonaCatalogSelectionBadge.tsx | 2 +- .../src/features/agents/ui/PersonaDialog.tsx | 4 +- .../features/agents/ui/PersonaIdentity.tsx | 2 +- .../src/features/agents/ui/RespondToField.tsx | 2 +- desktop/src/features/agents/ui/TeamDialog.tsx | 4 +- .../features/agents/ui/TeamImportDialog.tsx | 2 +- .../src/features/agents/ui/TeamsSection.tsx | 6 +-- .../channels/ui/AddChannelBotDialog.tsx | 2 +- .../ui/AddChannelBotPersonasSection.tsx | 4 +- .../channels/ui/AgentSessionThreadPanel.tsx | 2 +- .../features/channels/ui/BotActivityBar.tsx | 4 +- .../channels/ui/ChannelManagementSheet.tsx | 2 +- .../channels/ui/ChannelMemberInviteCard.tsx | 2 +- .../channels/ui/ChannelScreenHeader.tsx | 2 +- .../src/features/channels/ui/QuickBotBar.tsx | 2 +- desktop/src/features/chat/ui/ChatHeader.tsx | 8 ++-- .../features/forum/ui/DeleteActionMenu.tsx | 8 +--- .../forum/ui/ForumComposerCompactLayout.tsx | 7 ++-- .../src/features/forum/ui/ForumPostCard.tsx | 2 +- .../src/features/home/ui/InboxDetailPane.tsx | 10 +---- .../src/features/home/ui/InboxListPane.tsx | 4 +- .../features/home/ui/RecentNotesSection.tsx | 2 +- .../huddle/components/HeadphonesNotice.tsx | 2 +- .../features/huddle/components/HuddleBar.tsx | 2 +- .../huddle/components/MicControls.tsx | 8 ++-- .../ui/MeshComputeSettingsCard.tsx | 2 +- .../mesh-compute/ui/RelayMeshAgentSection.tsx | 2 +- .../messages/ui/ComposerAttachments.tsx | 6 +-- .../src/features/messages/ui/DiffMessage.tsx | 2 +- .../messages/ui/DiffMessageExpanded.tsx | 4 +- .../messages/ui/FormattingToolbar.tsx | 4 +- .../messages/ui/MentionAutocomplete.tsx | 2 +- .../messages/ui/TypingIndicatorRow.tsx | 2 +- .../src/features/onboarding/ui/AvatarStep.tsx | 2 +- .../onboarding/ui/MembershipDenied.tsx | 11 ++++-- .../onboarding/ui/NostrKeyImportForm.tsx | 2 +- .../features/onboarding/ui/ProfileStep.tsx | 3 +- .../src/features/onboarding/ui/SetupStep.tsx | 2 +- .../src/features/profile/ui/AvatarUpload.tsx | 12 ++++-- .../profile/ui/ProfileAvatarEditor.tsx | 15 +++++-- .../profile/ui/UserProfilePanelSections.tsx | 4 +- .../profile/ui/UserProfilePopover.tsx | 2 +- .../projects/ui/ProjectDetailScreen.tsx | 18 ++++----- .../src/features/projects/ui/ProjectsView.tsx | 6 +-- .../features/pulse/ui/AgentActivityCard.tsx | 6 +-- desktop/src/features/pulse/ui/NoteCard.tsx | 2 +- desktop/src/features/pulse/ui/PulseView.tsx | 2 +- .../relay-members/ui/RelayMembersCard.tsx | 4 +- .../ui/RelayMembersSettingsCard.tsx | 7 +++- .../src/features/settings/UpdateIndicator.tsx | 25 +++++++----- .../ui/ChannelTemplatesSettingsCard.tsx | 12 +++--- .../settings/ui/DoctorSettingsPanel.tsx | 6 +-- .../settings/ui/MobilePairingCard.tsx | 4 +- .../settings/ui/NotificationSettingsCard.tsx | 2 +- .../settings/ui/ProfileSettingsCard.tsx | 6 +-- .../features/settings/ui/SettingsPanels.tsx | 5 ++- .../src/features/settings/ui/SoundPicker.tsx | 4 +- .../sidebar/ui/CustomChannelSection.tsx | 10 ++--- .../features/sidebar/ui/MoreUnreadButton.tsx | 2 +- .../features/sidebar/ui/SidebarSection.tsx | 2 +- .../features/workflows/ui/ChannelCombobox.tsx | 10 +++-- .../workflows/ui/WorkflowApprovalCard.tsx | 4 +- .../features/workflows/ui/WorkflowCard.tsx | 2 +- .../workflows/ui/WorkflowDetailPanel.tsx | 4 +- .../workflows/ui/WorkflowFormBuilder.tsx | 4 +- .../workflows/ui/WorkflowStepCard.tsx | 2 +- .../ui/WorkflowWebhookHeadersEditor.tsx | 4 +- .../workflows/ui/workflowFormPrimitives.tsx | 2 +- .../workspaces/ui/WorkspaceSwitcher.tsx | 14 +++---- desktop/src/shared/ui/VideoPlayer.tsx | 4 +- desktop/src/shared/ui/import-status-icon.tsx | 4 +- desktop/src/shared/ui/markdown.tsx | 4 +- web/src/features/repos/ui/RepoBlobViewer.tsx | 2 +- web/src/features/repos/ui/RepoRefsSection.tsx | 8 ++-- web/src/features/repos/ui/ReposPage.tsx | 4 +- 83 files changed, 251 insertions(+), 204 deletions(-) diff --git a/desktop/src/app/AppTopChrome.tsx b/desktop/src/app/AppTopChrome.tsx index bfe27655f..739c03ecc 100644 --- a/desktop/src/app/AppTopChrome.tsx +++ b/desktop/src/app/AppTopChrome.tsx @@ -2,8 +2,10 @@ import { ChevronLeft, ChevronRight } from "lucide-react"; import { TopbarSearch } from "@/features/search/ui/TopbarSearch"; import type { Channel, SearchHit } from "@/shared/api/types"; +import { cn } from "@/shared/lib/cn"; import { Button } from "@/shared/ui/button"; import { SidebarTrigger, useSidebar } from "@/shared/ui/sidebar"; +import { Skeleton } from "@/shared/ui/skeleton"; type AppTopChromeProps = { canGoBack: boolean; @@ -16,6 +18,7 @@ type AppTopChromeProps = { onOpenResult: (hit: SearchHit) => void; searchHidden?: boolean; searchFocusRequest: number; + searchLoading?: boolean; }; function GlobalTopDivider() { @@ -39,6 +42,7 @@ function CenterColumnTopbarSearch({ onOpenChannel, onOpenResult, searchFocusRequest, + searchLoading = false, }: Pick< AppTopChromeProps, | "channels" @@ -46,8 +50,11 @@ function CenterColumnTopbarSearch({ | "onOpenChannel" | "onOpenResult" | "searchFocusRequest" + | "searchLoading" >) { const { isResizing, state } = useSidebar(); + const searchClassName = + "pointer-events-auto w-[220px] max-w-full md:w-[300px] lg:w-[360px] xl:w-[420px] 2xl:w-[480px]"; return (
- + {searchLoading ? ( + + ) : ( + + )}
); } const TOP_CHROME_ICON_BUTTON_CLASS = - "rounded-[4px] text-muted-foreground/70 hover:bg-border/45 hover:text-foreground"; + "h-7 w-7 rounded-[4px] text-muted-foreground/70 hover:bg-border/45 hover:text-foreground [&_svg]:size-4"; export function AppTopChrome({ canGoBack, @@ -85,6 +102,7 @@ export function AppTopChrome({ onOpenResult, searchHidden = false, searchFocusRequest, + searchLoading = false, }: AppTopChromeProps) { return ( <> @@ -94,7 +112,7 @@ export function AppTopChrome({ data-tauri-drag-region /> -
+
diff --git a/desktop/src/features/agents/ui/AgentSessionToolItem.tsx b/desktop/src/features/agents/ui/AgentSessionToolItem.tsx index 09411f2e6..78dd98304 100644 --- a/desktop/src/features/agents/ui/AgentSessionToolItem.tsx +++ b/desktop/src/features/agents/ui/AgentSessionToolItem.tsx @@ -81,7 +81,7 @@ export function ToolItem({ ) : null} - + {action.label} {action.value} - + ); } diff --git a/desktop/src/features/agents/ui/AgentSessionTranscriptList.tsx b/desktop/src/features/agents/ui/AgentSessionTranscriptList.tsx index ef11f463f..2f1f47e1f 100644 --- a/desktop/src/features/agents/ui/AgentSessionTranscriptList.tsx +++ b/desktop/src/features/agents/ui/AgentSessionTranscriptList.tsx @@ -27,7 +27,7 @@ export function AgentSessionTranscriptList({ if (items.length === 0) { return (
- +

No ACP activity yet

{emptyDescription}

@@ -126,7 +126,7 @@ function MessageItem({ {isAssistant ? (
- + {agentName} @@ -163,7 +163,7 @@ function ThoughtItem({ {item.title} - +
@@ -186,7 +186,7 @@ function MetadataItem({ {item.sections.length} section{item.sections.length === 1 ? "" : "s"} - +
{item.sections.map((section) => ( @@ -196,7 +196,7 @@ function MetadataItem({ > {section.title} - +
               {section.body.trim() || "No metadata."}
diff --git a/desktop/src/features/agents/ui/BatchImportDialog.tsx b/desktop/src/features/agents/ui/BatchImportDialog.tsx
index 7d09089cb..5e0ba0f6c 100644
--- a/desktop/src/features/agents/ui/BatchImportDialog.tsx
+++ b/desktop/src/features/agents/ui/BatchImportDialog.tsx
@@ -213,12 +213,12 @@ export function BatchImportDialog({
                   onClick={() => setSkippedExpanded((prev) => !prev)}
                   type="button"
                 >
-                  
+                  
                   {skipped.length} file{skipped.length !== 1 ? "s" : ""} skipped
                   {skippedExpanded ? (
-                    
+                    
                   ) : (
-                    
+                    
                   )}
                 
                 {skippedExpanded ? (
diff --git a/desktop/src/features/agents/ui/CopyButton.tsx b/desktop/src/features/agents/ui/CopyButton.tsx
index fa8183142..a8d0b621f 100644
--- a/desktop/src/features/agents/ui/CopyButton.tsx
+++ b/desktop/src/features/agents/ui/CopyButton.tsx
@@ -20,7 +20,7 @@ export function CopyButton({
       type="button"
       variant="outline"
     >
-      
+      
       {label ?? "Copy"}
     
   );
diff --git a/desktop/src/features/agents/ui/ManagedAgentSessionPanel.tsx b/desktop/src/features/agents/ui/ManagedAgentSessionPanel.tsx
index 4ff97a5bb..3defb7d2b 100644
--- a/desktop/src/features/agents/ui/ManagedAgentSessionPanel.tsx
+++ b/desktop/src/features/agents/ui/ManagedAgentSessionPanel.tsx
@@ -3,7 +3,6 @@ import {
   CircleAlert,
   CircleDot,
   Clock3,
-  Loader2,
   TerminalSquare,
   XCircle,
 } from "lucide-react";
@@ -14,6 +13,7 @@ import type { ManagedAgent } from "@/shared/api/types";
 import { cn } from "@/shared/lib/cn";
 import { Badge } from "@/shared/ui/badge";
 import { Skeleton } from "@/shared/ui/skeleton";
+import { Spinner } from "@/shared/ui/spinner";
 import { AgentSessionTranscriptList } from "./AgentSessionTranscriptList";
 import { RawEventRail } from "./RawEventRail";
 import type {
@@ -229,7 +229,7 @@ function ObserverStatusBadge({ state }: { state: ConnectionState }) {
     state === "open"
       ? { label: "Live", Icon: CircleDot, variant: "default" as const }
       : state === "connecting"
-        ? { label: "Connecting", Icon: Loader2, variant: "secondary" as const }
+        ? { label: "Connecting", variant: "secondary" as const }
         : state === "error"
           ? {
               label: "Unavailable",
@@ -239,12 +239,15 @@ function ObserverStatusBadge({ state }: { state: ConnectionState }) {
           : state === "closed"
             ? { label: "Closed", Icon: Clock3, variant: "secondary" as const }
             : { label: "Idle", Icon: Clock3, variant: "secondary" as const };
+  const StatusIcon = display.Icon;
 
   return (
     
-      
+      {StatusIcon ? (
+        
+      ) : (
+        
+      )}
       {display.label}
     
   );
@@ -253,7 +256,7 @@ function ObserverStatusBadge({ state }: { state: ConnectionState }) {
 function EmptyObserverState() {
   return (
     
- +

Observer not attached

The live feed is available for local agents started after this update. diff --git a/desktop/src/features/agents/ui/ModelPicker.tsx b/desktop/src/features/agents/ui/ModelPicker.tsx index 783b8db54..3e16814f6 100644 --- a/desktop/src/features/agents/ui/ModelPicker.tsx +++ b/desktop/src/features/agents/ui/ModelPicker.tsx @@ -93,7 +93,7 @@ export function ModelPicker({ variant="ghost" > {displayLabel} - + {loading ? (

- + Loading models...
) : error ? ( diff --git a/desktop/src/features/agents/ui/PersonaCatalogSelectionBadge.tsx b/desktop/src/features/agents/ui/PersonaCatalogSelectionBadge.tsx index fb0058424..0dcd58669 100644 --- a/desktop/src/features/agents/ui/PersonaCatalogSelectionBadge.tsx +++ b/desktop/src/features/agents/ui/PersonaCatalogSelectionBadge.tsx @@ -20,7 +20,7 @@ export function PersonaCatalogSelectionBadge({ : "border border-border/70 bg-background/85 text-muted-foreground", )} > - {isActive ? : null} + {isActive ? : null} {isActive ? personaCatalogCopy.selectedState : personaCatalogCopy.availableState} diff --git a/desktop/src/features/agents/ui/PersonaDialog.tsx b/desktop/src/features/agents/ui/PersonaDialog.tsx index 4393187f5..e2e42a14a 100644 --- a/desktop/src/features/agents/ui/PersonaDialog.tsx +++ b/desktop/src/features/agents/ui/PersonaDialog.tsx @@ -497,12 +497,12 @@ export function PersonaDialog({ : undefined } > - + {importButtonLabel} {isImportingUpdate ? ( - + ) : null} diff --git a/desktop/src/features/agents/ui/PersonaIdentity.tsx b/desktop/src/features/agents/ui/PersonaIdentity.tsx index 3b129cc42..eb2c5c025 100644 --- a/desktop/src/features/agents/ui/PersonaIdentity.tsx +++ b/desktop/src/features/agents/ui/PersonaIdentity.tsx @@ -46,7 +46,7 @@ export function PersonaIdentity({ className="flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground transition-colors hover:text-foreground" type="button" > - + diff --git a/desktop/src/features/agents/ui/RespondToField.tsx b/desktop/src/features/agents/ui/RespondToField.tsx index 2e903bfeb..055022a8d 100644 --- a/desktop/src/features/agents/ui/RespondToField.tsx +++ b/desktop/src/features/agents/ui/RespondToField.tsx @@ -258,7 +258,7 @@ function AllowlistPicker({ onClick={() => onRemove(pubkey)} type="button" > - +
))} diff --git a/desktop/src/features/agents/ui/TeamDialog.tsx b/desktop/src/features/agents/ui/TeamDialog.tsx index 06421bc51..2e2eb2856 100644 --- a/desktop/src/features/agents/ui/TeamDialog.tsx +++ b/desktop/src/features/agents/ui/TeamDialog.tsx @@ -475,12 +475,12 @@ export function TeamDialog({ : undefined } > - + {importButtonLabel} {isImportingUpdate ? ( - + ) : null} diff --git a/desktop/src/features/agents/ui/TeamImportDialog.tsx b/desktop/src/features/agents/ui/TeamImportDialog.tsx index e29d8e486..021548ea5 100644 --- a/desktop/src/features/agents/ui/TeamImportDialog.tsx +++ b/desktop/src/features/agents/ui/TeamImportDialog.tsx @@ -130,7 +130,7 @@ export function TeamImportDialog({ {preview ? (
- +

{preview.name} diff --git a/desktop/src/features/agents/ui/TeamsSection.tsx b/desktop/src/features/agents/ui/TeamsSection.tsx index bcbcd7e10..145fc22f4 100644 --- a/desktop/src/features/agents/ui/TeamsSection.tsx +++ b/desktop/src/features/agents/ui/TeamsSection.tsx @@ -108,7 +108,7 @@ export function TeamsSection({ onClick={onInstallFromDirectory} type="button" > - + Install from directory - + @@ -184,7 +184,7 @@ export function TeamsSection({ className="flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground transition-colors hover:text-foreground" type="button" > - + diff --git a/desktop/src/features/channels/ui/AddChannelBotDialog.tsx b/desktop/src/features/channels/ui/AddChannelBotDialog.tsx index 139931e63..403fa84c1 100644 --- a/desktop/src/features/channels/ui/AddChannelBotDialog.tsx +++ b/desktop/src/features/channels/ui/AddChannelBotDialog.tsx @@ -530,7 +530,7 @@ export function AddChannelBotDialog({ variant="ghost" > {runtimeTriggerLabel} - + ) : null} @@ -193,7 +193,7 @@ export function AddChannelBotPersonasSection({

{persona.displayName}

diff --git a/desktop/src/features/channels/ui/AgentSessionThreadPanel.tsx b/desktop/src/features/channels/ui/AgentSessionThreadPanel.tsx index c35be5657..ae633bbf3 100644 --- a/desktop/src/features/channels/ui/AgentSessionThreadPanel.tsx +++ b/desktop/src/features/channels/ui/AgentSessionThreadPanel.tsx @@ -102,7 +102,7 @@ export function AgentSessionThreadPanel({ type="button" variant="outline" > - + Stop diff --git a/desktop/src/features/channels/ui/BotActivityBar.tsx b/desktop/src/features/channels/ui/BotActivityBar.tsx index d4ee6ff1e..a289200ad 100644 --- a/desktop/src/features/channels/ui/BotActivityBar.tsx +++ b/desktop/src/features/channels/ui/BotActivityBar.tsx @@ -201,7 +201,7 @@ export function BotActivityComposerAction({ {isInline ? {visibleStatusLabel} : "working"} {isInline ? null : ( - + )} @@ -244,7 +244,7 @@ export function BotActivityComposerAction({ displayName={agent.name} /> {agent.name} - + ); })} diff --git a/desktop/src/features/channels/ui/ChannelManagementSheet.tsx b/desktop/src/features/channels/ui/ChannelManagementSheet.tsx index cda00f0cf..e708dfb9b 100644 --- a/desktop/src/features/channels/ui/ChannelManagementSheet.tsx +++ b/desktop/src/features/channels/ui/ChannelManagementSheet.tsx @@ -79,7 +79,7 @@ function MetadataPill({ }) { return (
- + {label}
); diff --git a/desktop/src/features/channels/ui/ChannelMemberInviteCard.tsx b/desktop/src/features/channels/ui/ChannelMemberInviteCard.tsx index 7f093294d..4a06ff83e 100644 --- a/desktop/src/features/channels/ui/ChannelMemberInviteCard.tsx +++ b/desktop/src/features/channels/ui/ChannelMemberInviteCard.tsx @@ -234,7 +234,7 @@ export function ChannelMemberInviteCard({ }} type="button" > - +
))} diff --git a/desktop/src/features/channels/ui/ChannelScreenHeader.tsx b/desktop/src/features/channels/ui/ChannelScreenHeader.tsx index a873069f7..a8dbeda72 100644 --- a/desktop/src/features/channels/ui/ChannelScreenHeader.tsx +++ b/desktop/src/features/channels/ui/ChannelScreenHeader.tsx @@ -60,7 +60,7 @@ export function ChannelScreenHeader({ size="sm" variant="default" > - + {isJoining ? "Joining…" : "Join"} ) : ( diff --git a/desktop/src/features/channels/ui/QuickBotBar.tsx b/desktop/src/features/channels/ui/QuickBotBar.tsx index b4eec62c0..3d4d24385 100644 --- a/desktop/src/features/channels/ui/QuickBotBar.tsx +++ b/desktop/src/features/channels/ui/QuickBotBar.tsx @@ -81,7 +81,7 @@ export function QuickBotBar({ personas, pending, onAdd }: QuickBotBarProps) { )} {isThisPending ? (
- +
) : null} diff --git a/desktop/src/features/chat/ui/ChatHeader.tsx b/desktop/src/features/chat/ui/ChatHeader.tsx index ba027edaa..90b6c4e7d 100644 --- a/desktop/src/features/chat/ui/ChatHeader.tsx +++ b/desktop/src/features/chat/ui/ChatHeader.tsx @@ -32,8 +32,8 @@ type ChatHeaderProps = { statusBadge?: React.ReactNode; }; -const HEADER_ICON_CLASS = "h-[14px] w-[14px] text-muted-foreground"; -const CHANNEL_HASH_ICON_CLASS = "h-[14px] w-[14px] translate-y-px"; +const HEADER_ICON_CLASS = "h-4 w-4 text-muted-foreground"; +const CHANNEL_HASH_ICON_CLASS = "h-4 w-4 translate-y-px"; function ChannelIcon({ channelType, @@ -98,12 +98,12 @@ export function ChatHeader({ const header = (
diff --git a/desktop/src/features/forum/ui/ForumComposerCompactLayout.tsx b/desktop/src/features/forum/ui/ForumComposerCompactLayout.tsx index e482e0142..848dd7964 100644 --- a/desktop/src/features/forum/ui/ForumComposerCompactLayout.tsx +++ b/desktop/src/features/forum/ui/ForumComposerCompactLayout.tsx @@ -5,6 +5,7 @@ import { Plus } from "lucide-react"; import { cn } from "@/shared/lib/cn"; import { Button } from "@/shared/ui/button"; +import { Spinner } from "@/shared/ui/spinner"; type ForumComposerCompactLayoutProps = { editor: Editor | null; @@ -45,12 +46,12 @@ export function ForumComposerCompactLayout({ variant="ghost" > {isSending ? ( - ) : ( - + )}
diff --git a/desktop/src/features/forum/ui/ForumPostCard.tsx b/desktop/src/features/forum/ui/ForumPostCard.tsx index 92633a0d1..2ce878aee 100644 --- a/desktop/src/features/forum/ui/ForumPostCard.tsx +++ b/desktop/src/features/forum/ui/ForumPostCard.tsx @@ -125,7 +125,7 @@ export function ForumPostCard({ {summary && summary.replyCount > 0 ? (
- + {summary.replyCount}{" "} {summary.replyCount === 1 ? "reply" : "replies"} diff --git a/desktop/src/features/home/ui/InboxDetailPane.tsx b/desktop/src/features/home/ui/InboxDetailPane.tsx index 2104811b1..8b504744f 100644 --- a/desktop/src/features/home/ui/InboxDetailPane.tsx +++ b/desktop/src/features/home/ui/InboxDetailPane.tsx @@ -264,10 +264,7 @@ export function InboxDetailPane({ type="button" > {hasChannelContext ? ( - + ) : null} {contextLabel} @@ -279,10 +276,7 @@ export function InboxDetailPane({ title={item.fullTimestampLabel} > {hasChannelContext ? ( - + ) : null} {contextLabel} diff --git a/desktop/src/features/home/ui/InboxListPane.tsx b/desktop/src/features/home/ui/InboxListPane.tsx index f3f2af662..ac3e59b1b 100644 --- a/desktop/src/features/home/ui/InboxListPane.tsx +++ b/desktop/src/features/home/ui/InboxListPane.tsx @@ -59,7 +59,7 @@ export function InboxListPane({
- +

Inbox

@@ -73,7 +73,7 @@ export function InboxListPane({ variant="outline" > {activeFilter?.label ?? "All"} - + diff --git a/desktop/src/features/home/ui/RecentNotesSection.tsx b/desktop/src/features/home/ui/RecentNotesSection.tsx index d786af379..2bacbc838 100644 --- a/desktop/src/features/home/ui/RecentNotesSection.tsx +++ b/desktop/src/features/home/ui/RecentNotesSection.tsx @@ -67,7 +67,7 @@ export function RecentNotesSection({ size="sm" /> {isAgent ? ( - + ) : null}
diff --git a/desktop/src/features/huddle/components/HeadphonesNotice.tsx b/desktop/src/features/huddle/components/HeadphonesNotice.tsx index de588bed7..17a8f343c 100644 --- a/desktop/src/features/huddle/components/HeadphonesNotice.tsx +++ b/desktop/src/features/huddle/components/HeadphonesNotice.tsx @@ -24,7 +24,7 @@ export function HeadphonesNotice({ onDismiss }: { onDismiss: () => void }) { data-testid="huddle-headphones-notice" className="flex items-center gap-1.5 rounded bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300" > - + Headphones recommended — echo cancellation lands in the next release. diff --git a/desktop/src/features/huddle/components/HuddleBar.tsx b/desktop/src/features/huddle/components/HuddleBar.tsx index fb32276b7..d28895185 100644 --- a/desktop/src/features/huddle/components/HuddleBar.tsx +++ b/desktop/src/features/huddle/components/HuddleBar.tsx @@ -304,7 +304,7 @@ export function HuddleBar({ className }: HuddleBarProps) { size="icon" variant="ghost" > - +
diff --git a/desktop/src/features/huddle/components/MicControls.tsx b/desktop/src/features/huddle/components/MicControls.tsx index 5730144f5..7cd5d648d 100644 --- a/desktop/src/features/huddle/components/MicControls.tsx +++ b/desktop/src/features/huddle/components/MicControls.tsx @@ -67,7 +67,7 @@ export function MicControls({ size="icon" variant="secondary" > - +
@@ -151,7 +151,7 @@ export function SpeakerControls({ size="icon" variant="secondary" > - +
@@ -192,7 +192,7 @@ export function DeviceList({ type="button" > System default @@ -207,7 +207,7 @@ export function DeviceList({ type="button" > {d.label} diff --git a/desktop/src/features/mesh-compute/ui/MeshComputeSettingsCard.tsx b/desktop/src/features/mesh-compute/ui/MeshComputeSettingsCard.tsx index 3af762234..edb08e131 100644 --- a/desktop/src/features/mesh-compute/ui/MeshComputeSettingsCard.tsx +++ b/desktop/src/features/mesh-compute/ui/MeshComputeSettingsCard.tsx @@ -244,7 +244,7 @@ export function MeshComputeSettingsCard() { diff --git a/desktop/src/features/mesh-compute/ui/RelayMeshAgentSection.tsx b/desktop/src/features/mesh-compute/ui/RelayMeshAgentSection.tsx index 3a9fdb0b4..c0ac1235d 100644 --- a/desktop/src/features/mesh-compute/ui/RelayMeshAgentSection.tsx +++ b/desktop/src/features/mesh-compute/ui/RelayMeshAgentSection.tsx @@ -166,7 +166,7 @@ export function RelayMeshAgentSection({ ) : null} {overrides.length > 0 ? (

- + Using Relay mesh overrides this agent's {overrides.join(", ")}. diff --git a/desktop/src/features/messages/ui/ComposerAttachments.tsx b/desktop/src/features/messages/ui/ComposerAttachments.tsx index 2444895a2..8030c173c 100644 --- a/desktop/src/features/messages/ui/ComposerAttachments.tsx +++ b/desktop/src/features/messages/ui/ComposerAttachments.tsx @@ -135,7 +135,7 @@ export const ComposerAttachments = React.memo(function ComposerAttachments({ className="group relative" >

- + {label} @@ -186,7 +186,7 @@ export const ComposerAttachments = React.memo(function ComposerAttachments({ )}
- +
) : ( @@ -231,7 +231,7 @@ export const ComposerAttachments = React.memo(function ComposerAttachments({ /> )} - + Close diff --git a/desktop/src/features/messages/ui/DiffMessage.tsx b/desktop/src/features/messages/ui/DiffMessage.tsx index ca5336dfc..9189e6309 100644 --- a/desktop/src/features/messages/ui/DiffMessage.tsx +++ b/desktop/src/features/messages/ui/DiffMessage.tsx @@ -86,7 +86,7 @@ export default function DiffMessage({ type="button" variant="ghost" > - + Expand diff diff --git a/desktop/src/features/messages/ui/DiffMessageExpanded.tsx b/desktop/src/features/messages/ui/DiffMessageExpanded.tsx index fa7ec24ba..15ce1703e 100644 --- a/desktop/src/features/messages/ui/DiffMessageExpanded.tsx +++ b/desktop/src/features/messages/ui/DiffMessageExpanded.tsx @@ -46,7 +46,7 @@ export default function DiffMessageExpanded({ type="button" variant={viewType === "unified" ? "secondary" : "ghost"} > - + Unified
diff --git a/desktop/src/features/messages/ui/FormattingToolbar.tsx b/desktop/src/features/messages/ui/FormattingToolbar.tsx index fab4a1bfd..368ef5ea4 100644 --- a/desktop/src/features/messages/ui/FormattingToolbar.tsx +++ b/desktop/src/features/messages/ui/FormattingToolbar.tsx @@ -212,13 +212,13 @@ export const FormattingToolbar = React.memo(function FormattingToolbar({ "hover:bg-muted hover:text-foreground", "focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring", "disabled:pointer-events-none disabled:opacity-50", - "[&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0", + "[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", item.active ? "bg-primary text-primary-foreground" : "bg-transparent text-muted-foreground", )} > - + diff --git a/desktop/src/features/messages/ui/MentionAutocomplete.tsx b/desktop/src/features/messages/ui/MentionAutocomplete.tsx index c9a5528cd..94a9fcb2d 100644 --- a/desktop/src/features/messages/ui/MentionAutocomplete.tsx +++ b/desktop/src/features/messages/ui/MentionAutocomplete.tsx @@ -98,7 +98,7 @@ export const MentionAutocomplete = React.memo(function MentionAutocomplete({ >
diff --git a/desktop/src/features/onboarding/ui/AvatarStep.tsx b/desktop/src/features/onboarding/ui/AvatarStep.tsx index a99c69013..d339c1d62 100644 --- a/desktop/src/features/onboarding/ui/AvatarStep.tsx +++ b/desktop/src/features/onboarding/ui/AvatarStep.tsx @@ -167,7 +167,7 @@ function AvatarStepActions({ {isSaving || isUploadingAvatar ? ( ) : ( "Next" diff --git a/desktop/src/features/onboarding/ui/MembershipDenied.tsx b/desktop/src/features/onboarding/ui/MembershipDenied.tsx index 4f0618f94..a3bfc5c87 100644 --- a/desktop/src/features/onboarding/ui/MembershipDenied.tsx +++ b/desktop/src/features/onboarding/ui/MembershipDenied.tsx @@ -89,7 +89,7 @@ export function MembershipDenied({ Membership required
- +

Not a member yet @@ -172,7 +172,7 @@ export function MembershipDenied({ className="flex items-start gap-2 rounded-md border border-primary/30 bg-primary/5 px-3 py-2 text-xs" data-testid="membership-denied-npub-preview" > - +

This will use this Nostr identity: @@ -197,7 +197,10 @@ export function MembershipDenied({ type="submit" > {isImportingKey ? ( - + ) : ( "Import key" )} @@ -236,7 +239,7 @@ export function MembershipDenied({ }} type="button" > - + Use a different key ) : null} diff --git a/desktop/src/features/onboarding/ui/NostrKeyImportForm.tsx b/desktop/src/features/onboarding/ui/NostrKeyImportForm.tsx index b251fb9e3..a31e45592 100644 --- a/desktop/src/features/onboarding/ui/NostrKeyImportForm.tsx +++ b/desktop/src/features/onboarding/ui/NostrKeyImportForm.tsx @@ -222,7 +222,7 @@ export function NostrKeyImportForm({ className="flex items-start gap-2 rounded-md border border-primary/30 bg-primary/5 px-3 py-2 text-xs" data-testid="nostr-import-npub-preview" > - +

This will use this Nostr identity: diff --git a/desktop/src/features/onboarding/ui/ProfileStep.tsx b/desktop/src/features/onboarding/ui/ProfileStep.tsx index 9236f9e8b..024bd1e3d 100644 --- a/desktop/src/features/onboarding/ui/ProfileStep.tsx +++ b/desktop/src/features/onboarding/ui/ProfileStep.tsx @@ -92,6 +92,7 @@ export function ProfileStep({ ) : null} {isSaving ? ( - + ) : ( "Next" )} diff --git a/desktop/src/features/onboarding/ui/SetupStep.tsx b/desktop/src/features/onboarding/ui/SetupStep.tsx index 2bc343958..2a3588bbc 100644 --- a/desktop/src/features/onboarding/ui/SetupStep.tsx +++ b/desktop/src/features/onboarding/ui/SetupStep.tsx @@ -106,7 +106,7 @@ function RuntimeStatus({ className="flex h-8 shrink-0 items-center justify-center" role="status" > - +

); } diff --git a/desktop/src/features/profile/ui/AvatarUpload.tsx b/desktop/src/features/profile/ui/AvatarUpload.tsx index 81a5c83cf..dd371a398 100644 --- a/desktop/src/features/profile/ui/AvatarUpload.tsx +++ b/desktop/src/features/profile/ui/AvatarUpload.tsx @@ -1,9 +1,10 @@ import * as React from "react"; -import { Camera, Link2, Loader2, Upload, X } from "lucide-react"; +import { Camera, Link2, Upload, X } from "lucide-react"; import { ProfileAvatar } from "@/features/profile/ui/ProfileAvatar"; import { useAvatarUpload } from "@/features/profile/useAvatarUpload"; import { Input } from "@/shared/ui/input"; +import { Spinner } from "@/shared/ui/spinner"; type AvatarUploadProps = { avatarUrl: string; @@ -90,7 +91,7 @@ export function AvatarUpload({ title="Remove photo" type="button" > - + ) : (
@@ -127,9 +128,12 @@ export function AvatarUpload({ type="button" > {isUploading ? ( - + ) : ( - + )} {isUploading ? ( diff --git a/desktop/src/features/profile/ui/ProfileAvatarEditor.tsx b/desktop/src/features/profile/ui/ProfileAvatarEditor.tsx index 5ae567faf..d2de41973 100644 --- a/desktop/src/features/profile/ui/ProfileAvatarEditor.tsx +++ b/desktop/src/features/profile/ui/ProfileAvatarEditor.tsx @@ -1,6 +1,6 @@ import emojiData from "@emoji-mart/data"; import Picker from "@emoji-mart/react"; -import { Link2, Loader2, UploadCloud } from "lucide-react"; +import { Link2, UploadCloud } from "lucide-react"; import { motion } from "motion/react"; import * as React from "react"; @@ -579,7 +579,10 @@ export function ProfileAvatarEditor({ data-testid={`${testIdPrefix}-drop-mask`} /> {isUploading ? ( - + ) : ( @@ -960,7 +966,10 @@ export function ProfileAvatarEditor({ type="button" > {donePending ? ( - + ) : ( "Done" )} diff --git a/desktop/src/features/profile/ui/UserProfilePanelSections.tsx b/desktop/src/features/profile/ui/UserProfilePanelSections.tsx index 05a97e82f..d003ed94e 100644 --- a/desktop/src/features/profile/ui/UserProfilePanelSections.tsx +++ b/desktop/src/features/profile/ui/UserProfilePanelSections.tsx @@ -345,7 +345,7 @@ function ProfileHeroDescription({ about }: { about: string }) { type="button" > more - + ) : null} {expanded ? ( @@ -356,7 +356,7 @@ function ProfileHeroDescription({ about }: { about: string }) { type="button" > less - + ) : null}
diff --git a/desktop/src/features/profile/ui/UserProfilePopover.tsx b/desktop/src/features/profile/ui/UserProfilePopover.tsx index d6e3d277c..dcceb0a27 100644 --- a/desktop/src/features/profile/ui/UserProfilePopover.tsx +++ b/desktop/src/features/profile/ui/UserProfilePopover.tsx @@ -259,7 +259,7 @@ export function UserProfilePopover({ }} type="button" > - + View activity log ) : null} diff --git a/desktop/src/features/projects/ui/ProjectDetailScreen.tsx b/desktop/src/features/projects/ui/ProjectDetailScreen.tsx index 5f48472f9..f01f383d6 100644 --- a/desktop/src/features/projects/ui/ProjectDetailScreen.tsx +++ b/desktop/src/features/projects/ui/ProjectDetailScreen.tsx @@ -30,7 +30,7 @@ function CloneUrlRow({ url }: { url: string }) { return (
- + {url}
@@ -89,7 +89,7 @@ export function ProjectDetailScreen({ projectId }: ProjectDetailScreenProps) { size="sm" variant="ghost" > - + Back to Projects
@@ -111,7 +111,7 @@ export function ProjectDetailScreen({ projectId }: ProjectDetailScreenProps) { size="sm" variant="outline" > - + Back to Projects

@@ -136,7 +136,7 @@ export function ProjectDetailScreen({ projectId }: ProjectDetailScreenProps) { size="sm" variant="ghost" > - + Back to Projects
@@ -144,7 +144,7 @@ export function ProjectDetailScreen({ projectId }: ProjectDetailScreenProps) {
- +

{project.name}

{project.description ? ( @@ -178,7 +178,7 @@ export function ProjectDetailScreen({ projectId }: ProjectDetailScreenProps) { rel="noopener noreferrer" target="_blank" > - + {project.webUrl}
@@ -188,7 +188,7 @@ export function ProjectDetailScreen({ projectId }: ProjectDetailScreenProps) {

- + Contributors ({project.contributors.length})

diff --git a/desktop/src/features/projects/ui/ProjectsView.tsx b/desktop/src/features/projects/ui/ProjectsView.tsx index 098eb7238..715fe4c18 100644 --- a/desktop/src/features/projects/ui/ProjectsView.tsx +++ b/desktop/src/features/projects/ui/ProjectsView.tsx @@ -86,19 +86,19 @@ export function ProjectsView() {
{project.cloneUrls.length > 0 ? ( - + {project.cloneUrls[0]} ) : null} {project.contributors.length > 0 ? ( - + {project.contributors.length} ) : null} {project.webUrl ? ( - + Web ) : null} diff --git a/desktop/src/features/pulse/ui/AgentActivityCard.tsx b/desktop/src/features/pulse/ui/AgentActivityCard.tsx index 7fdc10977..3c2e8a7a3 100644 --- a/desktop/src/features/pulse/ui/AgentActivityCard.tsx +++ b/desktop/src/features/pulse/ui/AgentActivityCard.tsx @@ -66,7 +66,7 @@ export function AgentActivityCard({ type="button" > - +
@@ -87,9 +87,9 @@ export function AgentActivityCard({ type="button" > {expanded ? ( - + ) : ( - + )} {group.notes.length} updates diff --git a/desktop/src/features/pulse/ui/NoteCard.tsx b/desktop/src/features/pulse/ui/NoteCard.tsx index a3e71f89f..794237667 100644 --- a/desktop/src/features/pulse/ui/NoteCard.tsx +++ b/desktop/src/features/pulse/ui/NoteCard.tsx @@ -171,7 +171,7 @@ export function NoteCard({ displayName={displayName} /> {isAgent ? ( - + ) : null} diff --git a/desktop/src/features/pulse/ui/PulseView.tsx b/desktop/src/features/pulse/ui/PulseView.tsx index 9ea771b38..82aefc14d 100644 --- a/desktop/src/features/pulse/ui/PulseView.tsx +++ b/desktop/src/features/pulse/ui/PulseView.tsx @@ -349,7 +349,7 @@ export function PulseView({ currentPubkey }: PulseViewProps) { className="absolute right-1.5 top-1/2 flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-foreground/10 text-foreground transition-colors hover:bg-foreground/15 dark:bg-white/85 dark:text-black dark:hover:bg-white" type="button" > - +
diff --git a/desktop/src/features/relay-members/ui/RelayMembersCard.tsx b/desktop/src/features/relay-members/ui/RelayMembersCard.tsx index 38faefa20..ac64b108a 100644 --- a/desktop/src/features/relay-members/ui/RelayMembersCard.tsx +++ b/desktop/src/features/relay-members/ui/RelayMembersCard.tsx @@ -121,7 +121,7 @@ function MemberRow({ size="sm" variant="ghost" > - + Actions @@ -231,7 +231,7 @@ export function RelayMembersCard({ onClick={() => setAddDialogOpen(true)} size="sm" > - + Add Member ) : null} diff --git a/desktop/src/features/relay-members/ui/RelayMembersSettingsCard.tsx b/desktop/src/features/relay-members/ui/RelayMembersSettingsCard.tsx index bc1c60c36..c522e209b 100644 --- a/desktop/src/features/relay-members/ui/RelayMembersSettingsCard.tsx +++ b/desktop/src/features/relay-members/ui/RelayMembersSettingsCard.tsx @@ -165,10 +165,10 @@ function RelayMemberRow({
{member.role === "owner" ? ( - + ) : null} {member.role === "admin" ? ( - + ) : null} {displayName} {isSelf ? ( @@ -461,10 +461,13 @@ export function RelayMembersSettingsCard({
setSearch(event.target.value)} placeholder="Search members by name, npub, or role…" + spellCheck={false} type="text" value={search} /> diff --git a/desktop/src/features/settings/UpdateIndicator.tsx b/desktop/src/features/settings/UpdateIndicator.tsx index 97d8bb6e3..dd004286e 100644 --- a/desktop/src/features/settings/UpdateIndicator.tsx +++ b/desktop/src/features/settings/UpdateIndicator.tsx @@ -1,6 +1,8 @@ -import { Loader2, RefreshCcw, RotateCw } from "lucide-react"; +import type { ComponentType } from "react"; +import { RefreshCcw, RotateCw } from "lucide-react"; import { Button } from "@/shared/ui/button"; +import { Spinner } from "@/shared/ui/spinner"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/shared/ui/tooltip"; import { useUpdaterContext } from "./hooks/UpdaterProvider"; @@ -9,13 +11,18 @@ import type { UpdateStatus } from "./hooks/use-updater"; const indicatorButtonClass = "relative text-muted-foreground/80 hover:bg-muted/60 hover:text-foreground"; +type IndicatorIcon = ComponentType<{ + "aria-hidden"?: boolean; + className?: string; +}>; + const variants: Record< "available" | "downloading" | "installing" | "ready", { - Icon: typeof RefreshCcw; + Icon: IndicatorIcon; + iconClassName?: string; label: string; badgeColor: string; - spin?: boolean; } > = { available: { @@ -24,16 +31,16 @@ const variants: Record< badgeColor: "bg-primary", }, downloading: { - Icon: Loader2, + Icon: Spinner, + iconClassName: "h-4 w-4 border-2", label: "Downloading update\u2026", badgeColor: "bg-primary", - spin: true, }, installing: { - Icon: Loader2, + Icon: Spinner, + iconClassName: "h-4 w-4 border-2", label: "Installing update\u2026", badgeColor: "bg-primary", - spin: true, }, ready: { Icon: RotateCw, @@ -62,7 +69,7 @@ export function UpdateIndicator({ className }: { className?: string }) { return null; } - const { Icon, label, badgeColor, spin } = variant; + const { Icon, iconClassName = "h-4 w-4", label, badgeColor } = variant; const isActionable = status.state === "available" || status.state === "ready"; const handleClick = status.state === "ready" @@ -87,7 +94,7 @@ export function UpdateIndicator({ className }: { className?: string }) { type="button" variant="ghost" > - + diff --git a/desktop/src/features/settings/ui/ChannelTemplatesSettingsCard.tsx b/desktop/src/features/settings/ui/ChannelTemplatesSettingsCard.tsx index 0181e1928..b933c61a2 100644 --- a/desktop/src/features/settings/ui/ChannelTemplatesSettingsCard.tsx +++ b/desktop/src/features/settings/ui/ChannelTemplatesSettingsCard.tsx @@ -120,7 +120,7 @@ export function ChannelTemplatesSettingsCard() { type="button" variant="outline" > - + Create
@@ -229,13 +229,13 @@ function TemplateRow({
{agentCount > 0 ? ( - + {agentCount} {agentCount === 1 ? "agent" : "agents"} ) : null} {template.canvasTemplate ? ( - + canvas ) : null} @@ -255,11 +255,11 @@ function TemplateRow({ - + Edit - + Duplicate {!template.isBuiltin ? ( @@ -267,7 +267,7 @@ function TemplateRow({ className="text-destructive focus:text-destructive" onClick={onDelete} > - + Delete ) : null} diff --git a/desktop/src/features/settings/ui/DoctorSettingsPanel.tsx b/desktop/src/features/settings/ui/DoctorSettingsPanel.tsx index a6d3044cd..4b7022baf 100644 --- a/desktop/src/features/settings/ui/DoctorSettingsPanel.tsx +++ b/desktop/src/features/settings/ui/DoctorSettingsPanel.tsx @@ -56,9 +56,9 @@ function InstallActions({ variant="outline" > {isInstalling ? ( - + ) : ( - + )} {isInstalling ? "Installing..." : "Install"} @@ -68,7 +68,7 @@ function InstallActions({ onClick={() => void openUrl(runtime.installInstructionsUrl)} type="button" > - + View instructions
diff --git a/desktop/src/features/settings/ui/MobilePairingCard.tsx b/desktop/src/features/settings/ui/MobilePairingCard.tsx index 2e6c77c49..6ae0850e3 100644 --- a/desktop/src/features/settings/ui/MobilePairingCard.tsx +++ b/desktop/src/features/settings/ui/MobilePairingCard.tsx @@ -225,7 +225,7 @@ function PairingDialog({ type="button" > {qrUri} - +
@@ -332,7 +332,7 @@ export function MobilePairingCard({ - +

Pair Mobile Device

diff --git a/desktop/src/features/settings/ui/NotificationSettingsCard.tsx b/desktop/src/features/settings/ui/NotificationSettingsCard.tsx index 55a0c9ab7..05a47e03c 100644 --- a/desktop/src/features/settings/ui/NotificationSettingsCard.tsx +++ b/desktop/src/features/settings/ui/NotificationSettingsCard.tsx @@ -227,7 +227,7 @@ export function NotificationSettingsCard({ > {showComingSoon ? ( <> - + Show less ) : ( diff --git a/desktop/src/features/settings/ui/ProfileSettingsCard.tsx b/desktop/src/features/settings/ui/ProfileSettingsCard.tsx index cfe3c9bb2..66951685c 100644 --- a/desktop/src/features/settings/ui/ProfileSettingsCard.tsx +++ b/desktop/src/features/settings/ui/ProfileSettingsCard.tsx @@ -57,7 +57,7 @@ function IdentityRow({ title={`Copy ${label}`} type="button" > - + Copy ) : null} @@ -97,7 +97,7 @@ function EditProfileMetadataButton({ title={accessibleLabel} type="button" > - + {actionLabel} ); @@ -577,7 +577,7 @@ export function ProfileSettingsCard({ this device.

- +
setSearch(e.target.value)} placeholder="Search themes..." + spellCheck={false} type="text" value={search} /> @@ -269,7 +272,7 @@ function ThemeSettingsCard() { type="button" > {accentColor === color.value && ( - + )} ); diff --git a/desktop/src/features/settings/ui/SoundPicker.tsx b/desktop/src/features/settings/ui/SoundPicker.tsx index 5de4f450c..716290f33 100644 --- a/desktop/src/features/settings/ui/SoundPicker.tsx +++ b/desktop/src/features/settings/ui/SoundPicker.tsx @@ -135,9 +135,9 @@ export function SoundPicker({ variant="ghost" > {isPlaying ? ( - + ) : ( - + )} diff --git a/desktop/src/features/sidebar/ui/CustomChannelSection.tsx b/desktop/src/features/sidebar/ui/CustomChannelSection.tsx index 61986d70d..28bad4293 100644 --- a/desktop/src/features/sidebar/ui/CustomChannelSection.tsx +++ b/desktop/src/features/sidebar/ui/CustomChannelSection.tsx @@ -255,7 +255,7 @@ function SectionHeaderActions({ title="Mark all as read" type="button" > - + ) : null} {onBrowse ? ( @@ -548,7 +548,7 @@ export function CustomChannelSection({ >
diff --git a/desktop/src/features/sidebar/ui/MoreUnreadButton.tsx b/desktop/src/features/sidebar/ui/MoreUnreadButton.tsx index 5ebca7e47..22f9119f0 100644 --- a/desktop/src/features/sidebar/ui/MoreUnreadButton.tsx +++ b/desktop/src/features/sidebar/ui/MoreUnreadButton.tsx @@ -3,7 +3,7 @@ import type * as React from "react"; import { Button } from "@/shared/ui/button"; const MORE_UNREAD_BUTTON_CLASS = - "h-7 min-h-7 gap-1.5 rounded-full border-0 bg-primary px-2.5 text-[11px] font-medium text-primary-foreground shadow-md hover:bg-primary/90 [&_svg]:size-3.5"; + "h-7 min-h-7 gap-1.5 rounded-full border-0 bg-primary px-2.5 text-[11px] font-medium text-primary-foreground shadow-md hover:bg-primary/90 [&_svg]:size-4"; export function MoreUnreadButton({ bottomClassName = "bottom-0", diff --git a/desktop/src/features/sidebar/ui/SidebarSection.tsx b/desktop/src/features/sidebar/ui/SidebarSection.tsx index 6d9210622..7f1998f02 100644 --- a/desktop/src/features/sidebar/ui/SidebarSection.tsx +++ b/desktop/src/features/sidebar/ui/SidebarSection.tsx @@ -202,7 +202,7 @@ export function ChannelMenuButton({ {isMuted ? ( {selected ? formatChannelLabel(selected) : "Select a channel..."} - +
- + el?.focus()} className="flex-1 bg-transparent text-sm outline-hidden placeholder:text-muted-foreground" onChange={(e) => { @@ -119,6 +120,7 @@ export function ChannelCombobox({ }} onKeyDown={handleKeyDown} placeholder="Search channels..." + spellCheck={false} value={query} />
@@ -142,7 +144,7 @@ export function ChannelCombobox({ > diff --git a/desktop/src/features/workflows/ui/WorkflowApprovalCard.tsx b/desktop/src/features/workflows/ui/WorkflowApprovalCard.tsx index e48f09c46..8c39b01f5 100644 --- a/desktop/src/features/workflows/ui/WorkflowApprovalCard.tsx +++ b/desktop/src/features/workflows/ui/WorkflowApprovalCard.tsx @@ -54,7 +54,7 @@ export function WorkflowApprovalCard({ approval }: WorkflowApprovalCardProps) { } size="sm" > - + Approve
diff --git a/desktop/src/features/workflows/ui/WorkflowCard.tsx b/desktop/src/features/workflows/ui/WorkflowCard.tsx index 0a5526a4d..577bdbabd 100644 --- a/desktop/src/features/workflows/ui/WorkflowCard.tsx +++ b/desktop/src/features/workflows/ui/WorkflowCard.tsx @@ -89,7 +89,7 @@ export function WorkflowCard({ {channelName ? {channelName} : null} {triggerSummary ? {triggerSummary} : null} - + {new Date(workflow.updatedAt * 1000).toLocaleDateString()}
diff --git a/desktop/src/features/workflows/ui/WorkflowDetailPanel.tsx b/desktop/src/features/workflows/ui/WorkflowDetailPanel.tsx index faf22857f..f610caee1 100644 --- a/desktop/src/features/workflows/ui/WorkflowDetailPanel.tsx +++ b/desktop/src/features/workflows/ui/WorkflowDetailPanel.tsx @@ -93,7 +93,7 @@ export function WorkflowDetailPanel({ size="sm" variant="outline" > - + Edit ) : null} @@ -103,7 +103,7 @@ export function WorkflowDetailPanel({ size="sm" variant="outline" > - + {triggerMutation.isPending ? "Triggering..." : "Trigger"}
@@ -335,7 +335,7 @@ export function WorkflowFormBuilder({ type="button" variant="outline" > - + Add step
diff --git a/desktop/src/features/workflows/ui/WorkflowStepCard.tsx b/desktop/src/features/workflows/ui/WorkflowStepCard.tsx index ac7018ff5..ffe6b3546 100644 --- a/desktop/src/features/workflows/ui/WorkflowStepCard.tsx +++ b/desktop/src/features/workflows/ui/WorkflowStepCard.tsx @@ -326,7 +326,7 @@ export function WorkflowStepCard({ type="button" variant="ghost" > - +
diff --git a/desktop/src/features/workflows/ui/WorkflowWebhookHeadersEditor.tsx b/desktop/src/features/workflows/ui/WorkflowWebhookHeadersEditor.tsx index 6645ac1a2..14eb33e3d 100644 --- a/desktop/src/features/workflows/ui/WorkflowWebhookHeadersEditor.tsx +++ b/desktop/src/features/workflows/ui/WorkflowWebhookHeadersEditor.tsx @@ -48,7 +48,7 @@ export function WorkflowWebhookHeadersEditor({ type="button" variant="outline" > - + Add header @@ -109,7 +109,7 @@ export function WorkflowWebhookHeadersEditor({ type="button" variant="ghost" > - + ))} diff --git a/desktop/src/features/workflows/ui/workflowFormPrimitives.tsx b/desktop/src/features/workflows/ui/workflowFormPrimitives.tsx index e6173ee23..ca0f8a872 100644 --- a/desktop/src/features/workflows/ui/workflowFormPrimitives.tsx +++ b/desktop/src/features/workflows/ui/workflowFormPrimitives.tsx @@ -25,7 +25,7 @@ export function FormSelect({ > {children} - + ); } diff --git a/desktop/src/features/workspaces/ui/WorkspaceSwitcher.tsx b/desktop/src/features/workspaces/ui/WorkspaceSwitcher.tsx index 2e7e14d04..89b17a93c 100644 --- a/desktop/src/features/workspaces/ui/WorkspaceSwitcher.tsx +++ b/desktop/src/features/workspaces/ui/WorkspaceSwitcher.tsx @@ -121,7 +121,7 @@ export function WorkspaceSwitcher({ data-testid="relay-connection-warning" role="img" > - + @@ -154,8 +154,8 @@ export function WorkspaceSwitcher({ )} @@ -209,7 +209,7 @@ export function WorkspaceSwitcher({ > {activeWorkspace?.id === workspace.id ? ( - + ) : null} @@ -226,7 +226,7 @@ export function WorkspaceSwitcher({ }} type="button" > - + ))} @@ -296,7 +296,7 @@ export function WorkspaceSwitcher({ > {activeWorkspace?.id === workspace.id ? ( - + ) : null} {workspace.name} @@ -311,7 +311,7 @@ export function WorkspaceSwitcher({ }} type="button" > - + ))} diff --git a/desktop/src/shared/ui/VideoPlayer.tsx b/desktop/src/shared/ui/VideoPlayer.tsx index b967b00e9..5dd42bff9 100644 --- a/desktop/src/shared/ui/VideoPlayer.tsx +++ b/desktop/src/shared/ui/VideoPlayer.tsx @@ -1627,7 +1627,7 @@ function VideoReviewDialog({ type="button" onClick={() => setIsEmojiPickerOpen((open) => !open)} > - + More reactions @@ -1900,7 +1900,7 @@ function VideoReviewCommentBody({

{reactions.some((reaction) => reaction.reactedByCurrentUser) ? ( ) : null} diff --git a/desktop/src/shared/ui/import-status-icon.tsx b/desktop/src/shared/ui/import-status-icon.tsx index 9617e44eb..aadb5b9bc 100644 --- a/desktop/src/shared/ui/import-status-icon.tsx +++ b/desktop/src/shared/ui/import-status-icon.tsx @@ -16,7 +16,9 @@ export function ImportStatusIcon({ }) { switch (status) { case "importing": - return ; + return ( + + ); case "done": return ; case "error": diff --git a/desktop/src/shared/ui/markdown.tsx b/desktop/src/shared/ui/markdown.tsx index b21b45e73..2f4a84663 100644 --- a/desktop/src/shared/ui/markdown.tsx +++ b/desktop/src/shared/ui/markdown.tsx @@ -520,7 +520,7 @@ function MarkdownCodeBlock({ type="button" variant="ghost" > - + Copy code block @@ -579,7 +579,7 @@ function FileCard({ className="my-1 inline-flex max-w-sm items-center gap-3 rounded-xl border border-border/70 bg-muted/40 px-3 py-2 text-left no-underline transition-colors hover:bg-muted/70" > - + diff --git a/web/src/features/repos/ui/RepoBlobViewer.tsx b/web/src/features/repos/ui/RepoBlobViewer.tsx index 0a53696d3..5adfdd2f0 100644 --- a/web/src/features/repos/ui/RepoBlobViewer.tsx +++ b/web/src/features/repos/ui/RepoBlobViewer.tsx @@ -258,7 +258,7 @@ export function RepoBlobPage() {
- +

{filepath}

{view && diff --git a/web/src/features/repos/ui/RepoRefsSection.tsx b/web/src/features/repos/ui/RepoRefsSection.tsx index 11b38acd7..07fdafa82 100644 --- a/web/src/features/repos/ui/RepoRefsSection.tsx +++ b/web/src/features/repos/ui/RepoRefsSection.tsx @@ -22,12 +22,12 @@ export function RepoRefsSection({ <>
- + {refs.head.ref} {refs.head.sha && ( - + {refs.head.sha.slice(0, 7)} )} @@ -36,13 +36,13 @@ export function RepoRefsSection({ )} - + {refs.branches.length}{" "} {refs.branches.length === 1 ? "branch" : "branches"} · - + {refs.tags.length} {refs.tags.length === 1 ? "tag" : "tags"}
diff --git a/web/src/features/repos/ui/ReposPage.tsx b/web/src/features/repos/ui/ReposPage.tsx index 72a972a4a..c738f769a 100644 --- a/web/src/features/repos/ui/ReposPage.tsx +++ b/web/src/features/repos/ui/ReposPage.tsx @@ -104,7 +104,7 @@ export function ReposPage() {

- Repositories + Repositories

{["a", "b", "c", "d", "e"].map((key) => ( @@ -131,7 +131,7 @@ export function ReposPage() {

- Repositories + Repositories

{/* Search + Sort bar */} From 9f121b0e2bff3adce5bfe84e585fbd5727622fa7 Mon Sep 17 00:00:00 2001 From: klopez4212 Date: Fri, 12 Jun 2026 15:26:04 +0100 Subject: [PATCH 2/2] Update narrow header menu spacing expectation --- desktop/tests/e2e/messaging.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desktop/tests/e2e/messaging.spec.ts b/desktop/tests/e2e/messaging.spec.ts index 610f174e0..825b53b0b 100644 --- a/desktop/tests/e2e/messaging.spec.ts +++ b/desktop/tests/e2e/messaging.spec.ts @@ -751,8 +751,8 @@ test("narrow thread view collapses channel header actions into a menu", async ({ throw new Error("Expected header action menu and thread panel bounds"); } const menuGapPx = threadPanelBox.x - (menuBox.x + menuBox.width); - expect(menuGapPx).toBeGreaterThanOrEqual(10); - expect(menuGapPx).toBeLessThanOrEqual(14); + expect(menuGapPx).toBeGreaterThanOrEqual(22); + expect(menuGapPx).toBeLessThanOrEqual(26); await menuTrigger.click();