diff --git a/src/components/CodeCopyButton.tsx b/src/components/CodeCopyButton.tsx index c6faefe..ce427c4 100644 --- a/src/components/CodeCopyButton.tsx +++ b/src/components/CodeCopyButton.tsx @@ -20,13 +20,13 @@ export function CodeCopyButton({ return ( ); diff --git a/src/components/CommandLauncher.tsx b/src/components/CommandLauncher.tsx index 50b0226..cbb664a 100644 --- a/src/components/CommandLauncher.tsx +++ b/src/components/CommandLauncher.tsx @@ -241,7 +241,7 @@ export default function CommandLauncher({ )} {cmd.spellCommand && ( -
+
{cmd.spellCommand}
)} @@ -254,7 +254,7 @@ export default function CommandLauncher({
-
+
↑↓ navigate execute esc close diff --git a/src/components/EventFooter.tsx b/src/components/EventFooter.tsx index 441689a..45b7098 100644 --- a/src/components/EventFooter.tsx +++ b/src/components/EventFooter.tsx @@ -41,15 +41,17 @@ export function EventFooter({ event }: EventFooterProps) { {/* Left: Kind Badge */} {/* Right: Relay Dropdown */} @@ -57,11 +59,11 @@ export function EventFooter({ event }: EventFooterProps) { diff --git a/src/components/LayoutControls.tsx b/src/components/LayoutControls.tsx index 30faee8..8d421a3 100644 --- a/src/components/LayoutControls.tsx +++ b/src/components/LayoutControls.tsx @@ -110,10 +110,10 @@ export function LayoutControls() { diff --git a/src/components/SpellbookDropdown.tsx b/src/components/SpellbookDropdown.tsx index 5176d64..8edc746 100644 --- a/src/components/SpellbookDropdown.tsx +++ b/src/components/SpellbookDropdown.tsx @@ -285,7 +285,7 @@ export function SpellbookDropdown() { variant="ghost" size="sm" className={cn( - "h-7 px-2 gap-1.5 text-muted-foreground hover:text-foreground", + "h-10 md:h-7 px-2 gap-1.5 text-muted-foreground hover:text-foreground", activeSpellbook && "text-foreground font-medium", isTemporary && "ring-1 ring-amber-500/50", )} diff --git a/src/components/TabBar.tsx b/src/components/TabBar.tsx index 2b204d5..dc9ef23 100644 --- a/src/components/TabBar.tsx +++ b/src/components/TabBar.tsx @@ -6,6 +6,7 @@ import { LayoutControls } from "./LayoutControls"; import { useEffect, useState } from "react"; import { Reorder, useDragControls } from "framer-motion"; import { Workspace } from "@/types/app"; +import { useIsMobile } from "@/hooks/useIsMobile"; interface TabItemProps { ws: Workspace; @@ -17,6 +18,7 @@ interface TabItemProps { saveLabel: () => void; setActiveWorkspace: (id: string) => void; startEditing: (id: string, label?: string) => void; + isMobile: boolean; } function TabItem({ @@ -29,6 +31,7 @@ function TabItem({ saveLabel, setActiveWorkspace, startEditing, + isMobile, }: TabItemProps) { const dragControls = useDragControls(); @@ -38,7 +41,7 @@ function TabItem({ value={ws} dragListener={false} dragControls={dragControls} - whileDrag={{ scale: 1.05 }} + whileDrag={isMobile ? undefined : { scale: 1.05 }} transition={{ type: "spring", stiffness: 500, damping: 30 }} className={cn( "flex items-center justify-center cursor-default outline-none", @@ -48,14 +51,14 @@ function TabItem({ // Render input field when editing
e.stopPropagation()} > - {ws.number} + {ws.number} -
dragControls.start(e)} - className="cursor-grab active:cursor-grabbing p-1 hover:bg-black/10 rounded flex items-center justify-center" - > - -
+ {/* Hide drag handle on mobile - reordering disabled */} + {!isMobile && ( +
dragControls.start(e)} + className="cursor-grab active:cursor-grabbing p-1 hover:bg-black/10 rounded flex items-center justify-center" + > + +
+ )}
@@ -113,6 +123,7 @@ export function TabBar() { reorderWorkspaces, } = useGrimoire(); const { workspaces, activeWorkspaceId } = state; + const isMobile = useIsMobile(); // State for inline label editing const [editingId, setEditingId] = useState(null); @@ -195,12 +206,16 @@ export function TabBar() { return ( <> -
+
{/* Left side: Workspace tabs + new workspace button */} reorderWorkspaces(newOrder.map((w) => w.id))} + onReorder={ + isMobile + ? () => {} // No-op on mobile - reordering disabled + : (newOrder) => reorderWorkspaces(newOrder.map((w) => w.id)) + } className="flex items-center gap-1 flex-nowrap list-none p-0 m-0" > {sortedWorkspaces.map((ws) => ( @@ -215,6 +230,7 @@ export function TabBar() { saveLabel={saveLabel} setActiveWorkspace={setActiveWorkspace} startEditing={startEditing} + isMobile={isMobile} /> ))} @@ -222,11 +238,11 @@ export function TabBar() { {/* Spacer to push right side controls to the end */} diff --git a/src/components/WindowToolbar.tsx b/src/components/WindowToolbar.tsx index da2d222..b2b279d 100644 --- a/src/components/WindowToolbar.tsx +++ b/src/components/WindowToolbar.tsx @@ -148,12 +148,12 @@ export function WindowToolbar({ {/* Copy button for NIPs */} @@ -161,13 +161,17 @@ export function WindowToolbar({ )} @@ -177,11 +181,11 @@ export function WindowToolbar({ @@ -248,12 +252,12 @@ export function WindowToolbar({ )} diff --git a/src/components/chat/MembersDropdown.tsx b/src/components/chat/MembersDropdown.tsx index 18f9ad4..f796bb7 100644 --- a/src/components/chat/MembersDropdown.tsx +++ b/src/components/chat/MembersDropdown.tsx @@ -21,9 +21,9 @@ export function MembersDropdown({ participants }: MembersDropdownProps) { return ( - diff --git a/src/components/command-launcher.css b/src/components/command-launcher.css index a502e68..1404a80 100644 --- a/src/components/command-launcher.css +++ b/src/components/command-launcher.css @@ -5,6 +5,14 @@ overflow: hidden; } +@media (max-width: 767px) { + .grimoire-command-launcher { + /* Use width with calc to stay centered (dialog uses translate-x-50%) */ + width: calc(100% - 32px); + max-width: calc(100% - 32px); + } +} + .grimoire-command-content { width: 100%; } @@ -84,13 +92,19 @@ } .command-item { - padding: 10px 12px; + padding: 14px 16px; cursor: pointer; transition: all 0.1s ease; margin-bottom: 2px; border: 1px solid transparent; } +@media (min-width: 768px) { + .command-item { + padding: 10px 12px; + } +} + /* Inverted selection - terminal style */ .command-item[aria-selected="true"] { background: hsl(var(--foreground)); @@ -163,25 +177,38 @@ display: flex; align-items: center; justify-content: space-between; - font-size: 12px; + font-size: 14px; color: hsl(var(--muted-foreground)); font-family: monospace; } +@media (min-width: 768px) { + .command-footer { + font-size: 12px; + } +} + .command-footer-status { color: hsl(var(--accent)); font-weight: 600; } .command-footer kbd { - padding: 2px 6px; + padding: 4px 10px; background: hsl(var(--muted)); border: 1px solid hsl(var(--border)); - font-size: 11px; + font-size: 13px; font-family: monospace; margin: 0 4px; } +@media (min-width: 768px) { + .command-footer kbd { + padding: 2px 6px; + font-size: 11px; + } +} + /* Scrollbar styling to match terminal aesthetic */ .command-list::-webkit-scrollbar { width: 8px; diff --git a/src/components/editor/EmojiSuggestionList.tsx b/src/components/editor/EmojiSuggestionList.tsx index cefdc1c..8d1a36f 100644 --- a/src/components/editor/EmojiSuggestionList.tsx +++ b/src/components/editor/EmojiSuggestionList.tsx @@ -103,9 +103,9 @@ export const EmojiSuggestionList = forwardRef<
-
+
{items.map((item, index) => (