{"version":3,"file":"index.cjs","sources":["../src/renderer/TemplateRenderer.tsx","../src/examples/menu-example.ts","../src/examples/hero-beneficios-example.ts","../src/examples/home-page-v1-example.ts","../src/index.ts"],"sourcesContent":["import { MenuTemplate } from '../components/MenuTemplate';\nimport { HeroBeneficiosTemplate } from '../components/HeroBeneficiosTemplate';\nimport { HomePageV1Template } from '../components/HomePageV1Template';\n\n/**\n * Mapa de slugs de templates a componentes React\n */\nconst TEMPLATE_COMPONENTS = {\n  menu: MenuTemplate,\n  'servicios-hero-beneficios': HeroBeneficiosTemplate,\n  'home-page-v1': HomePageV1Template,\n} as const;\n\nexport type TemplateSlug = keyof typeof TEMPLATE_COMPONENTS;\n\nexport interface TemplateRendererProps {\n  /** Slug del template a renderizar */\n  templateSlug: TemplateSlug;\n  /** Contenido del template (JSON de la DB) */\n  content: unknown;\n}\n\n/**\n * TemplateRenderer\n *\n * Componente inteligente que mapea un slug de template a su componente React correspondiente.\n * Este es el componente principal que usará el saas-cliente para renderizar landing pages.\n *\n * @example\n * ```tsx\n * // En el cliente:\n * const landingData = await fetch('/api/landing-pages/my-menu')\n *\n * <TemplateRenderer\n *   templateSlug={landingData.templateSlug}\n *   content={landingData.content}\n * />\n * ```\n */\nexport function TemplateRenderer({\n  templateSlug,\n  content,\n}: TemplateRendererProps) {\n  const Component = TEMPLATE_COMPONENTS[templateSlug];\n\n  if (!Component) {\n    return (\n      <div\n        style={{\n          padding: '40px',\n          textAlign: 'center',\n          backgroundColor: '#fee',\n          color: '#c00',\n        }}\n      >\n        <h1>Error: Template no encontrado</h1>\n        <p>\n          El template <code>{templateSlug}</code> no está registrado en el\n          TemplateRenderer.\n        </p>\n        <p>\n          Templates disponibles:{' '}\n          {Object.keys(TEMPLATE_COMPONENTS).join(', ')}\n        </p>\n      </div>\n    );\n  }\n\n  // Renderizar el componente con el content\n  // Nota: En producción, podrías validar el content aquí con validateContent()\n  // El cast a 'never' es seguro porque cada componente espera su propio tipo de content\n  return <Component content={content as never} />;\n}\n\n/**\n * Hook para obtener el componente de un template por slug\n *\n * @param slug - Slug del template\n * @returns El componente del template o undefined si no existe\n */\nexport function useTemplateComponent(slug: string) {\n  return TEMPLATE_COMPONENTS[slug as TemplateSlug];\n}\n\n/**\n * Verifica si un slug de template existe\n *\n * @param slug - Slug a verificar\n * @returns true si el template existe, false en caso contrario\n */\nexport function isValidTemplateSlug(slug: string): slug is TemplateSlug {\n  return slug in TEMPLATE_COMPONENTS;\n}\n","import type { MenuTemplateContent } from '../schemas/templates/menu';\n\n/**\n * Ejemplo de contenido para el template Menu\n *\n * Este ejemplo muestra un menú navideño completo con:\n * - Secciones de menú (Lasañas, Pastelones, Ensaladas, etc.)\n * - Items con precios variables (pequeño/grande o precio único)\n * - Combos especiales con items incluidos\n * - Footer con información de contacto y CTAs\n */\nexport const menuExample: MenuTemplateContent = {\n  imageUrl: 'https://via.placeholder.com/150', // URL de ejemplo\n  headerTitle: 'La Cocina de Lucy',\n  headerSubtitle: 'Menú Navideño 2025',\n  headerText: 'SABOR Y TRADICIÓN',\n  menuSectionTitle: 'Nuestro Menú',\n  combosTitle: 'Combos Especiales',\n  menuSections: [\n    {\n      title: 'Lasañas',\n      items: [\n        {\n          name: 'Lasaña de Res',\n          details: 'Con carne molida y salsa casera',\n          priceSmall: 'RD$1,300',\n          priceLarge: 'RD$2,000',\n        },\n        {\n          name: 'Lasaña de Pollo',\n          details: 'Con pollo desmenuzado',\n          priceSmall: 'RD$1,500',\n          priceLarge: 'RD$2,300',\n        },\n      ],\n    },\n    {\n      title: 'Pastelones',\n      items: [\n        {\n          name: 'Pastelón de Plátano Maduro',\n          priceSmall: 'RD$1,200',\n          priceLarge: 'RD$1,900',\n        },\n        {\n          name: 'Pastelón de Papa',\n          priceSmall: 'RD$1,000',\n          priceLarge: 'RD$1,700',\n        },\n      ],\n    },\n    {\n      title: 'Ensaladas',\n      items: [\n        {\n          name: 'Ensalada Rusa',\n          details: 'Blanca, roja o mixta',\n          price: 'RD$800',\n        },\n        {\n          name: 'Ensalada de Pasta',\n          price: 'RD$800',\n        },\n      ],\n    },\n    {\n      title: 'Arroces',\n      items: [\n        {\n          name: 'Arroz Navideño con nueces',\n          details: '5 lb',\n          price: 'RD$900',\n        },\n        {\n          name: 'Moro de Guandules',\n          details: '5 lb',\n          price: 'RD$750',\n        },\n      ],\n    },\n    {\n      title: 'Carnes',\n      items: [\n        {\n          name: 'Cerdo asado por libra',\n          details: 'Mínimo 5 lb',\n          price: 'RD$600',\n        },\n        {\n          name: 'Pavo o Pollo en Salsa Ragú',\n          details: 'Bandeja pequeña',\n          price: 'RD$1,100',\n        },\n      ],\n    },\n    {\n      title: 'Otros',\n      items: [\n        {\n          name: 'Niños Envueltos',\n          details: '12 unidades',\n          price: 'RD$900',\n        },\n      ],\n    },\n  ],\n  combos: [\n    {\n      name: 'Tradicional',\n      price: 'RD$2,800',\n      items: [\n        'Lasaña de Res (pequeña)',\n        'Ensalada Rusa',\n        'Arroz Navideño (5 lb)',\n      ],\n    },\n    {\n      name: 'Cena Premium',\n      price: 'RD$4,300',\n      items: [\n        'Lasaña de Pollo (pequeña)',\n        'Ensalada de Pasta',\n        'Moro de Guandules (5 lb)',\n        '2 lb de Cerdo Asado',\n      ],\n    },\n    {\n      name: 'Familia Grande',\n      price: 'RD$3,950',\n      items: [\n        'Lasaña de Res (grande)',\n        'Ensalada Rusa',\n        'Moro de Guandules (5 lb)',\n        'Niños Envueltos (12u)',\n      ],\n    },\n    {\n      name: 'Navideño Especial',\n      price: 'RD$5,000',\n      items: [\n        'Lasaña de Pollo (grande)',\n        'Ensalada Rusa',\n        'Arroz Navideño (5 lb)',\n        'Pavo/Pollo en Salsa Ragú',\n      ],\n    },\n    {\n      name: 'Antojos Mixtos',\n      price: 'RD$3,700',\n      items: [\n        'Pastelón de Plátano (pequeño)',\n        'Pastelón de Papa (pequeño)',\n        'Ensalada de Pasta',\n        'Arroz Navideño (5 lb)',\n      ],\n    },\n  ],\n  footerTitle: 'Condiciones de Pedido',\n  footerItems: [\n    {\n      title: '📞 Pedidos: ',\n      titleStrong: '849-535-7777',\n    },\n    {\n      title: '📅 Encargos con ',\n      titleStrong: '48 horas de anticipación',\n    },\n    {\n      title: '💰 Se requiere un ',\n      titleStrong: '50% de adelanto',\n    },\n  ],\n  footerCtaButtons: [\n    {\n      text: '📞 Llamar Ahora',\n      href: 'tel:8495357777',\n    },\n    {\n      text: '💬 WhatsApp',\n      href: 'https://wa.me/18495357777',\n    },\n  ],\n  footerText: '¡Haz de tu Navidad un momento especial con La Cocina de Lucy!',\n};\n","import type { HeroConBeneficiosContent } from '../schemas/templates/hero-beneficios';\n\n/**\n * Ejemplo de contenido para el template Hero con Beneficios\n *\n * Este objeto sigue la estructura definida en el schema\n */\nexport const heroConBeneficiosExample: HeroConBeneficiosContent = {\n  title: 'Construyo tu web profesional',\n  titleP: 'Diseño premium, rápido y enfocado en conversiones.',\n  subtitle: 'Asesoría personalizada',\n  subtitleP: 'Te guío paso a paso para lograr tu proyecto.',\n  ventajas: ['Entrega rápida', 'Arquitectura moderna', 'Diseño responsivo'],\n  ctas: [\n    {\n      text: 'Contactar por WhatsApp',\n      url: 'whatsapp',\n    },\n    {\n      text: 'Ver más información',\n      url: '#servicios',\n    },\n  ],\n};\n","import type { HomePageV1Content } from '../schemas/templates/home-page-v1';\n\n/**\n * Ejemplo de contenido para el template Home Page V1\n *\n * Este ejemplo muestra una home page completa con:\n * - Hero section con título, subtítulo y CTA\n * - Segunda sección con título y subtítulo\n * - 3 bloques de navegación (Servicios, Blog, Agendar Cita)\n */\nexport const homePageV1Example: HomePageV1Content = {\n  // === HERO SECTION ===\n  heroTitle: '¡Bienvenido a ImperioHub!',\n  heroSubtitle:\n    'Crea landing pages profesionales en minutos. Sin código, sin complicaciones.',\n  heroCtaText: 'Comenzar ahora',\n  heroCtaUrl: '/signup',\n\n  // === SECOND SECTION ===\n  secondTitle: 'Todo lo que necesitas para crecer',\n  secondSubtitle:\n    'Explora nuestras herramientas y recursos para llevar tu negocio al siguiente nivel',\n\n  // === 3 BLOQUES DE NAVEGACIÓN ===\n  navigationBlocks: [\n    {\n      title: 'Servicios',\n      subtitle: 'Descubre todas las soluciones que ofrecemos para tu negocio',\n      linkUrl: '/servicios',\n      linkText: 'Ver servicios',\n    },\n    {\n      title: 'Blog',\n      subtitle: 'Lee artículos y guías para mejorar tu presencia digital',\n      linkUrl: '/blog',\n      linkText: 'Ir al blog',\n    },\n    {\n      title: 'Agendar Cita',\n      subtitle: 'Reserva una consultoría personalizada con nuestro equipo',\n      linkUrl: '/agendar-cita',\n      linkText: 'Agendar ahora',\n    },\n  ],\n};\n","/**\n * @imperiohub/lp-templates\n *\n * Paquete centralizado de templates para landing pages del ecosistema ImperioHub SaaS.\n *\n * Este paquete exporta:\n * - Tipos y schemas de templates (compartidos por todos los repos)\n * - Validadores con Zod (backend los usa antes de guardar)\n * - Templates disponibles (backend los inserta, admin los lista)\n * - Componentes React (solo cliente los usa para renderizar)\n * - Utilidades para backend (generador de templates en DB)\n * - Ejemplos de contenido (para testing y desarrollo)\n *\n * @example\n * ```ts\n * // En saas-back (backend):\n * import { allTemplates, createLandingPageTemplate } from '@imperiohub/lp-templates/generator';\n * import { validateContent } from '@imperiohub/lp-templates';\n *\n * // En saas-admin (panel de administración):\n * import { menuTemplate, type MenuTemplateContent } from '@imperiohub/lp-templates/schemas';\n *\n * // En saas-cliente (frontend público):\n * import { TemplateRenderer } from '@imperiohub/lp-templates/components';\n * ```\n */\n\n// ===== SCHEMAS =====\n// Tipos, templates y validadores\nexport * from './schemas';\n\n// ===== COMPONENTS =====\n// Componentes React para renderizar templates\nexport * from './components';\n\n// ===== RENDERER =====\n// TemplateRenderer principal\nexport * from './renderer';\n\n// ===== EXAMPLES =====\n// Ejemplos de contenido para cada template\nexport * from './examples';\n\n// ===== GENERATOR =====\n// Utilidades para backend (opcional, mejor usar el export dedicado)\n// export * from './generator'; // NO exportar aquí para evitar dependencia de Prisma en todos los contextos\n\nexport const version = '0.1.0';\n"],"names":["TEMPLATE_COMPONENTS","MenuTemplate","HeroBeneficiosTemplate","HomePageV1Template","TemplateRenderer","templateSlug","content","Component","jsx","jsxs","useTemplateComponent","slug","isValidTemplateSlug","menuExample","heroConBeneficiosExample","homePageV1Example","version"],"mappings":"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"}