/* global React, Icon, Button, Badge, IconCircle, DoctorAvatar, SPECIALTIES, CATEGORIES, useTweaks */ const { useState: useStateSP, useMemo: useMemoSP } = React; /* ============================================================= SpecialtyCard — renders in one of three layouts based on tweaks. Layouts: classic → icon + name + blurb + WhatsApp button (with doctor strip if present) portrait → tall card, large avatar/icon area at top, info below minimal → flat, icon + name only, hover reveals action ============================================================= */ function SpecialtyCard({ spec, style: layout = "classic" }) { const waHref = "https://wa.me/" + spec.whatsapp + "?text=" + encodeURIComponent( `Olá! Vim pelo site da Maxxi Saúde. Gostaria de agendar ${spec.name}` + (spec.doctor ? ` com ${spec.doctor.name}.` : ".") ); if (layout === "minimal") return ; if (layout === "portrait") return ; return ; } /* ---- Classic layout ---- */ function ClassicCard({ spec, waHref }) { return (
{spec.doctor && (
Especialista
{spec.doctor.name}
)}

{spec.name}

{spec.blurb}

{spec.schedule && (
{spec.schedule}
)}
Agendar pelo WhatsApp
); } /* ---- Portrait layout ---- */ function PortraitCard({ spec, waHref }) { // Use accent-toned mini "portrait" surface that contains either a doctor avatar // (if known) or a big specialty glyph. return (
{/* Decorative big icon */}
{spec.doctor ? ( ) : (
)}

{spec.name}

{spec.doctor && (
{spec.doctor.name}
)}

{spec.blurb}

Agendar pelo WhatsApp
); } /* ---- Minimal layout ---- */ function MinimalCard({ spec, waHref }) { const [hover, setHover] = useStateSP(false); return ( setHover(true)} onMouseLeave={() => setHover(false)} style={{ display: "flex", alignItems: "center", gap: 16, background: hover ? "var(--site-accent-50)" : "var(--bg-card)", border: "1px solid " + (hover ? "var(--site-accent-200)" : "var(--border-subtle)"), borderRadius: 14, padding: "16px 18px", textDecoration: "none", color: "inherit", transition: "background var(--dur-fast), border-color var(--dur-fast), transform var(--dur-fast)", transform: hover ? "translateY(-2px)" : "translateY(0)", minHeight: 84, }}>
{spec.name}
{spec.doctor ? (
{spec.doctor.name}
) : (
Agenda pelo WhatsApp
)}
); } /* ============================================================= SpecialtiesGrid — used on home (limit) and especialidades (all). Driven by Tweaks (density + cardStyle). ============================================================= */ function SpecialtiesGrid({ limit, filter, search }) { const [tweaks] = useTweaks(); const filtered = useMemoSP(() => { let list = SPECIALTIES; if (filter && filter !== "todas") list = list.filter(s => s.category === filter); if (search) { const q = search.toLowerCase().trim(); if (q.length) { list = list.filter(s => s.name.toLowerCase().includes(q) || (s.doctor && s.doctor.name.toLowerCase().includes(q)) || (s.terms || []).some(t => t.toLowerCase().includes(q)) ); } } if (limit) list = list.slice(0, limit); return list; }, [filter, search, limit]); const compact = tweaks.density === "compact"; const minMobile = compact ? 220 : 260; const min = compact ? 240 : 300; return (
{filtered.map(s => ( ))} {filtered.length === 0 && (
Nenhuma especialidade encontrada com esse filtro. Tente outra busca.
)}
); } Object.assign(window, { SpecialtyCard, SpecialtiesGrid });