/* global React, Icon, Button, Badge, ProductCard, CanVisual, ProductMedia, SwatchGrid, PresentationSelector, StockLabel, useState */
/* ============================ HOME ============================ */
// Paleta acotada para el hero interactivo: cruza familias reales de NOGO.palette
// (azul de marca + frío + cálido + verde + neutro) — variedad sin choques de color.
const HERO_COLORS = [
{ name: "Azul Nogopaint", hex: "#0077b6" },
{ name: "Azul Noche", hex: "#283a63" },
{ name: "Terracota", hex: "#bd6a48" },
{ name: "Verde Salvia", hex: "#9aa881" },
{ name: "Gris Plomo", hex: "#73767a" },
];
function DtHome({ go, openProduct, startAdvisor }) {
const NOGO = window.NOGO;
const featured = NOGO.products.filter((p) => p.featured).concat(NOGO.products.filter((p) => !p.featured)).slice(0, 4);
const [heroColor, setHeroColor] = useState(HERO_COLORS[0]);
const [heroTick, setHeroTick] = useState(0);
const pickHeroColor = (c) => { setHeroColor(c); setHeroTick((t) => t + 1); };
const heroKey = `${heroColor.hex}-${heroTick}`;
const cats = [
{ id: "interior", label: "Interior", desc: "Látex y esmaltes lavables", icon: "home", hex: "#a8c8e0" },
{ id: "exterior", label: "Exterior", desc: "Resistentes a la intemperie", icon: "shield", hex: "#9aa881" },
{ id: "esmaltes", label: "Esmaltes", desc: "Madera y metal", icon: "brush", hex: "#e8a48b" },
{ id: "impermeab", label: "Impermeabilizantes", desc: "Techos y terrazas", icon: "drop", hex: "#cdbfa3" },
];
return (
{/* Hero */}
Asesoramiento experto, sin cargo
Pintá con la cantidad justa.
Nilo calcula cuántos litros necesitás según tus m². Elegí color, presentación y comprá sin desperdicio.
go("catalog")}>Ver productos
Probar asesor
¿Qué color pintamos?
{HERO_COLORS.map((c) => (
pickHeroColor(c)}
>
))}
Interior
Exterior
20 L
+30 colores
45 m² · 2 manos → 10 L
Calculado por Nilo
{/* Categorías */}
Categorías
{cats.map((c) => (
go("catalog")}>
{c.label} {c.desc}
))}
{/* Destacados */}
Más vendidos
go("catalog")} style={{ background: "none", border: "none", cursor: "pointer" }}>Ver catálogo completo →
{/* Banner servicios */}
¿Cuánta pintura necesito?
Al agregar un producto, nuestro asesor Nilo calcula los litros exactos y te recomienda los baldes y complementos.
Probar el asesor
{[["spark", "Asesoramiento a domicilio o virtual, sin cargo"], ["brush", "Mano de obra con pintores matriculados"], ["truck", "Envío gratis en Chivilcoy"]].map(([ic, txt]) => (
{txt}
))}
);
}
/* ============================ CATÁLOGO ============================ */
function DtCatalog({ openProduct, filters, setFilters }) {
const NOGO = window.NOGO;
const fams = Object.keys(NOGO.palette);
let list = NOGO.products;
if (filters.use) list = list.filter((p) => p.use === filters.use);
if (filters.colorFam) list = list.filter((p) => p.colors.includes(filters.colorFam));
const Check = ({ on, onClick, children }) => (
{children}
);
return (
Inicio Catálogo
Uso
setFilters({ ...filters, use: null })}>Todos
setFilters({ ...filters, use: "interior" })}>Interior
setFilters({ ...filters, use: "exterior" })}>Exterior
¿Dudas con el color?
Pedí asesoramiento sin cargo.
Contactar
{filters.use ? (filters.use === "interior" ? "Interior" : "Exterior") : "Todos los productos"}
{list.length} productos
{list.length === 0 &&
No hay productos con esos filtros.
}
);
}
/* ============================ FICHA ============================ */
function DtProduct({ product, go, onAdd }) {
const NOGO = window.NOGO;
const families = product.colors;
const [fam, setFam] = useState(families[0]);
const famColors = NOGO.palette[fam];
const [color, setColor] = useState(famColors[2] || famColors[0]);
const [presId, setPresId] = useState(product.pres[Math.min(1, product.pres.length - 1)]);
const pres = NOGO.presentations.filter((p) => product.pres.includes(p.id));
const price = NOGO.priceFor(product, presId);
const stock = NOGO.stockFor(product, presId);
const totalColors = families.reduce((n, f) => n + NOGO.palette[f].length, 0);
const tech = [
{ icon: "layers", label: "Rendimiento", value: `${product.rendimiento} m²/L por mano` },
{ icon: "brush", label: "Manos sugeridas", value: `${product.manos}` },
{ icon: "drop", label: "Dilución", value: product.dilucion },
{ icon: "clock", label: "Secado", value: product.secado },
{ icon: "brush", label: "Aplicación", value: product.aplicacion.join(" · ") },
{ icon: "shield", label: "Uso", value: product.use === "exterior" ? "Exterior" : "Interior" },
];
return (
go("home")}>Inicio
go("catalog")}>Catálogo
{product.name}
{product.use === "exterior" ? "Exterior" : "Interior"}
{product.featured && Más vendido }
{product.name}
{product.tagline}
{NOGO.fmt(price)}
Envío gratis en Chivilcoy
Color · {color.name}
{totalColors} colores disponibles
{families.map((f) => (
setFam(f)}>{f}
))}
onAdd({ product, presId, color })}>
{stock === 0 ? "Sin stock" : "Agregar y calcular cantidad"}
Al agregar, el asesor calcula cuántos litros necesitás.
);
}
Object.assign(window, { DtHome, DtCatalog, DtProduct });