{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "header", "type": "registry:block", "title": "header", "description": "Bloque Concorde header — incluye sus 1 componentes.", "dependencies": [ "react" ], "registryDependencies": [], "files": [ { "path": "bloques/header/desktop/dimensions.ts", "type": "registry:file", "target": "bloques/header/desktop/dimensions.ts", "content": "/**\n * Dimensiones del bloque Header — módulo PLANO (sin \"use client\") para que los\n * Server Components (catálogo /blocks, páginas de bloque) puedan importar estas\n * constantes sin que se evalúen a undefined → NaN en los cálculos de escala.\n */\n\nexport const HEADER_WIDTH = 798;\nexport const HEADER_HEIGHT = 64;\n" }, { "path": "bloques/header/desktop/Header.tsx", "type": "registry:file", "target": "bloques/header/desktop/Header.tsx", "content": "/**\n * Header — Bloque de Concorde (Voyager DS)\n *\n * Barra superior 798 × 64 con fondo vault (#2E0F70). A la derecha lleva el\n * Button «Ingresa» (variante sm-guest, con UserIcon), a 16px del borde y\n * centrado verticalmente — igual que el export de Figma (1312:4674).\n *\n * Si se pasa `username`, el CTA cambia a la variante logueada: «Bienvenido,\n * {username}» (Button sm-logged-in) — usado p.ej. en la Zona de usuario.\n */\n\n\"use client\";\n\nimport type { JSX, ReactNode } from \"react\";\nimport Button, { UserIcon } from \"../../../components/Button\";\nimport { HEADER_WIDTH, HEADER_HEIGHT } from \"./dimensions\";\n\nexport interface HeaderProps {\n /** Ancho de la barra. Por defecto HEADER_WIDTH (798, desktop); 420 en mobile. */\n width?: number | string;\n /** Logo a la izquierda (slot). En desktop no se usa (el logo va en el Sidebar);\n * en mobile se pasa el logo de la marca. */\n logo?: ReactNode;\n /** Usuario logueado. Si se pasa, el CTA muestra «Bienvenido, {username}»\n * (variante sm-logged-in) en vez de «Ingresa» (sm-guest). */\n username?: string;\n /** En mobile el ancho es 420 y el botón «Bienvenido, {username}» no entra junto\n * al logo+hamburguesa: con `compact` se muestra solo el ícono de usuario. */\n compact?: boolean;\n className?: string;\n}\n\nexport default function Header({ width = HEADER_WIDTH, logo, username, compact = false, className = \"\" }: HeaderProps): JSX.Element {\n return (\n \n {logo}\n {username && compact ? (\n // Solo el ícono circular (mobile) — el botón con texto no entra en 420px.\n \n \n \n ) : username ? (\n \n )}\n \n );\n}\n" }, { "path": "components/Button.tsx", "type": "registry:file", "target": "components/Button.tsx", "content": "// Button.tsx — Generado por Concorde\r\n// Fuente: https://voyager-ds.vercel.app/preview/components/pase1\r\n// Generado: 2026-05-25\r\n// EDITAR LIBREMENTE después de generar\r\n\r\n\"use client\";\r\n\r\nimport { forwardRef } from \"react\";\r\nimport type { ButtonHTMLAttributes, JSX, ReactNode } from \"react\";\r\n\r\nexport type ButtonVariant =\r\n | \"primary\"\r\n | \"negotiable\"\r\n | \"secondary\"\r\n | \"secondary-sm\"\r\n | \"ghost\"\r\n | \"outline\"\r\n | \"sm-guest\"\r\n | \"sm-logged-in\";\r\n\r\n/**\r\n * Hereda todos los atributos nativos de \r\n \r\n );\r\n});\r\n\r\nexport default Button;\r\n" } ] }