{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "bidmessage", "type": "registry:component", "title": "BidMessage", "description": "Componente Concorde BidMessage — un solo archivo, BidMessage.tsx.", "dependencies": [ "react" ], "registryDependencies": [], "files": [ { "path": "components/BidMessage.tsx", "type": "registry:file", "target": "components/BidMessage.tsx", "content": "\"use client\";\n\n/**\n * BidMessage — Generado por Concorde\n * Fuente: Figma VOYAGER · \"BidMessage\" (3162:12972 / 12990 / 13002 / 12984)\n *\n * Burbuja de mensaje de puja, estilo chat. Dos lados (cola en la esquina\n * inferior del lado):\n * · side=\"sent\" → derecha (cola inferior-derecha)\n * · side=\"received\" → izquierda (cola inferior-izquierda)\n * Color por `type`:\n * · \"live\" → relleno naranja (#FF9639→#BE3D00) + borde gradiente, texto blanco\n * · \"vault\" → relleno morado (#19004A→#3B1782→#2E0F70), texto blanco\n * · \"white\" → relleno blanco + borde lila, texto morado #3B1782\n * `logo` (slot) para la variante con logo. `children` = el mensaje.\n * Por convención: sent → live; received → vault/white. (type por defecto según side.)\n */\n\nimport type { JSX, ReactNode } from \"react\";\n\nexport type BidMessageSide = \"sent\" | \"received\";\nexport type BidMessageType = \"live\" | \"vault\" | \"white\";\n\nexport interface BidMessageProps {\n /** Lado de la burbuja (default \"received\") */\n side?: BidMessageSide;\n /** Color (default: sent→\"live\", received→\"vault\") */\n type?: BidMessageType;\n /** Logo opcional (slot) antes del texto */\n logo?: ReactNode;\n /** Contenido del mensaje */\n children?: ReactNode;\n className?: string;\n}\n\nconst STYLE_ID = \"concorde-bidmessage-styles\";\n\nconst BIDMESSAGE_STYLES = `\n.pbidmsg {\n display: inline-flex;\n align-items: center;\n gap: 9px;\n min-height: 40px;\n max-width: 100%;\n box-sizing: border-box;\n padding: 8px 18px;\n font-family: var(--vmc-font-display, \"Plus Jakarta Sans\", -apple-system, sans-serif);\n font-size: 14px;\n font-weight: 500;\n line-height: 1.3;\n}\n.pbidmsg__logo { display: inline-flex; align-items: center; flex-shrink: 0; }\n.pbidmsg__text { white-space: nowrap; }\n\n/* Cola según el lado */\n.pbidmsg--received { border-radius: 20px 20px 20px 4px; }\n.pbidmsg--sent { border-radius: 20px 20px 4px 20px; }\n\n/* live (naranja) — sent */\n.pbidmsg--live {\n border: 1.5px solid transparent;\n background-image:\n linear-gradient(180deg, #FF9639 0%, #EF852E 40%, #BE3D00 100%),\n linear-gradient(120deg, #ffffff 0%, #F4AC59 22%, #8460E5 74.5%, #ffffff 100%);\n background-origin: border-box;\n background-clip: padding-box, border-box;\n color: #ffffff;\n box-shadow: rgba(225,108,16,0.3) 0px 2px 12px;\n}\n\n/* vault (morado) — received */\n.pbidmsg--vault {\n border: none;\n background: linear-gradient(90deg, #19004A 0%, #3B1782 50%, #2E0F70 100%);\n color: #ffffff;\n box-shadow: rgba(46,15,112,0.35) 0px 4px 16px;\n}\n\n/* white (blanco, texto morado) — received */\n.pbidmsg--white {\n border: 1.5px solid transparent;\n background-image:\n linear-gradient(#ffffff, #ffffff),\n linear-gradient(135deg, #CFBAFF 0%, #ffffff 35%, #AE8EFF 65%, #CFBAFF 100%);\n background-origin: border-box;\n background-clip: padding-box, border-box;\n color: #3B1782;\n box-shadow: rgba(90,53,194,0.5) 0px 2px 10px;\n}\n`;\n\nlet _stylesInjected = false;\n\nexport default function BidMessage({\n side = \"received\",\n type,\n logo,\n children = \"PROPUSO US$ 25,000\",\n className = \"\",\n}: BidMessageProps): JSX.Element {\n const resolvedType: BidMessageType = type ?? (side === \"sent\" ? \"live\" : \"vault\");\n\n if (typeof document !== \"undefined\" && !_stylesInjected) {\n if (!document.getElementById(STYLE_ID)) {\n const el = document.createElement(\"style\");\n el.id = STYLE_ID;\n el.textContent = BIDMESSAGE_STYLES;\n document.head.appendChild(el);\n }\n _stylesInjected = true;\n }\n\n const cls = [\"pbidmsg\", `pbidmsg--${side}`, `pbidmsg--${resolvedType}`, className].filter(Boolean).join(\" \");\n\n return (\n <>\n \n