From d5c418c84f71ee471ea9e3fae7737b0ceee983fb Mon Sep 17 00:00:00 2001 From: Daniel Arroyo Date: Sun, 22 Mar 2026 17:10:25 -0300 Subject: [PATCH] fix: responsive header with hamburger menu for mobile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Desktop: single row with logo, nav links, QuickAdd, New note button - Mobile: logo + QuickAdd + hamburger icon → dropdown menu - Improved QuickAdd sizing for small screens Co-Authored-By: Claude Opus 4.6 --- .claude/settings.local.json | 3 +- prisma/dev.db | Bin 40960 -> 143360 bytes ...-resumen.md => 2026-03-22-1229-resumen.md} | 0 resumen/2026-03-22-1652-resumen.md | 5 ++ src/components/header.tsx | 81 +++++++++++++++--- src/components/quick-add.tsx | 14 +-- 6 files changed, 85 insertions(+), 18 deletions(-) rename resumen/{2026-03-22-resumen.md => 2026-03-22-1229-resumen.md} (100%) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 36bd4fe..60b962a 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -9,7 +9,8 @@ "Bash(node:*)", "Bash(curl:*)", "Bash(npx tsc:*)", - "Bash(npm list:*)" + "Bash(npm list:*)", + "Bash(npx jest:*)" ] } } diff --git a/prisma/dev.db b/prisma/dev.db index 72ed8e4a1f1e4a9281ed3eaa02c0cf1e191603a1..895c40adf760f23e725a3a0e73b9bdc5ca8aef66 100644 GIT binary patch literal 143360 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 F{(rPb;bQ;* literal 40960 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 diff --git a/resumen/2026-03-22-resumen.md b/resumen/2026-03-22-1229-resumen.md similarity index 100% rename from resumen/2026-03-22-resumen.md rename to resumen/2026-03-22-1229-resumen.md diff --git a/resumen/2026-03-22-1652-resumen.md b/resumen/2026-03-22-1652-resumen.md index 89858bc..16ca4df 100644 --- a/resumen/2026-03-22-1652-resumen.md +++ b/resumen/2026-03-22-1652-resumen.md @@ -148,6 +148,11 @@ model Backlink { - Registro de origen de creación (form/quick/import) - Feature flags configurables +### Mejoras UI Recientes +- Header responsive con menú hamburguesa en móvil +- Desktop: una fila con logo, nav links, QuickAdd y botón Nueva nota +- Mobile: logo + QuickAdd + hamburguesa → dropdown con nav links y botón Nueva nota + ## Algoritmo de Scoring ```typescript diff --git a/src/components/header.tsx b/src/components/header.tsx index 1eb6384..5560f8a 100644 --- a/src/components/header.tsx +++ b/src/components/header.tsx @@ -1,18 +1,21 @@ 'use client' +import { useState } from 'react' import Link from 'next/link' import { usePathname } from 'next/navigation' import { Button } from '@/components/ui/button' -import { Plus, FileText, Settings } from 'lucide-react' +import { Plus, FileText, Settings, Menu, X } from 'lucide-react' import { QuickAdd } from '@/components/quick-add' export function Header() { const pathname = usePathname() + const [mobileMenuOpen, setMobileMenuOpen] = useState(false) return (
-
-
+
+ {/* Desktop: single row */} +
Recall @@ -38,16 +41,74 @@ export function Header() { +
+ + + + +
-
- - - + + {/* Mobile: hamburger + logo */} +
+ + Recall +
+ + +
+ + {/* Mobile dropdown menu */} + {mobileMenuOpen && ( +
+ +
+ setMobileMenuOpen(false)}> + + +
+
+ )}
) diff --git a/src/components/quick-add.tsx b/src/components/quick-add.tsx index 12902ce..6c248ee 100644 --- a/src/components/quick-add.tsx +++ b/src/components/quick-add.tsx @@ -188,8 +188,8 @@ export function QuickAdd() { onFocus={() => setIsExpanded(true)} onPaste={handlePaste} className={cn( - 'w-48 transition-all duration-200', - isExpanded && 'w-72' + 'w-24 xs:w-32 sm:w-48 transition-all duration-200', + isExpanded && 'w-40 xs:w-48 sm:w-72' )} disabled={isLoading} /> @@ -202,29 +202,29 @@ export function QuickAdd() { type="button" onClick={toggleMultiline} className={cn( - 'inline-flex items-center justify-center rounded-lg border bg-background p-2', + 'inline-flex items-center justify-center rounded-lg border bg-background p-1.5 sm:p-2', 'hover:bg-accent hover:text-accent-foreground', 'transition-colors', isMultiline && 'bg-accent text-accent-foreground' )} title={isMultiline ? 'Modo línea' : 'Modo multilínea'} > - +