/* global React */ const { useState } = React; /* ---------------- Lucide-style icon ---------------- */ function Icon({ name, size = 20, stroke = 1.75, className = "", style = {} }) { const paths = { "calendar": <>, "calendar-days": <>, "map-pin": <>, "clock": <>, "phone": , "stethoscope": <>, "heart-pulse": <>, "scan-line": <>, "flask": <>, "heart": , "shield-check": <>, "user": <>, "users": <>, "activity": , "baby": <>, "brain": <>, "bone": , "smile": <>, "tooth": , "lungs": <>, "ribbon": <>, "head-side": <>, "sparkle": <>, "whatsapp": , "menu": <>, "x": , "check": , "check-circle": <>, "arrow-right": <>, "arrow-up-right": <>, "chevron-down": , "chevron-right": , "plus": <>, "minus": , "instagram": <>, "facebook": , "search": <>, "mail": <>, "external": <>, "shield": , "award": <>, "image": <>, "play": , "lock": <>, "file-text": <>, "info": <>, }; return ( {paths[name] || null} ); } /* ---------------- Eyebrow ---------------- */ function Eyebrow({ children, color = "accent" }) { const c = color === "blue" ? "var(--ms-blue-500)" : color === "green" ? "var(--ms-green-700)" : "var(--site-accent-700)"; return
{children}
; } /* ---------------- Section title ---------------- */ function SectionTitle({ eyebrow, eyebrowColor, title, kicker, align = "left", maxWidth = 720 }) { return (
{eyebrow && {eyebrow}}

{title}

{kicker &&

{kicker}

}
); } /* ---------------- Button ---------------- */ function Button({ children, variant = "primary", size = "md", icon, iconAfter, onClick, href, target, style: extra = {}, type, fullWidth }) { const base = { fontFamily: "inherit", fontWeight: 700, lineHeight: 1, borderRadius: 999, display: fullWidth ? "flex" : "inline-flex", alignItems: "center", justifyContent: "center", gap: 8, cursor: "pointer", border: 0, textDecoration: "none", whiteSpace: "nowrap", transition: "background var(--dur-fast), color var(--dur-fast), transform var(--dur-fast), box-shadow var(--dur-base)", width: fullWidth ? "100%" : undefined, }; const sizes = { sm: { fontSize: 13, padding: "10px 16px", minHeight: 36 }, md: { fontSize: 15, padding: "14px 22px", minHeight: 46 }, lg: { fontSize: 17, padding: "18px 28px", minHeight: 56 }, }; const variants = { primary: { background: "var(--site-accent-500)", color: "#fff", boxShadow: "var(--site-accent-glow)" }, secondary: { background: "var(--ms-blue-500)", color: "#fff", boxShadow: "var(--sh-brand-glow)" }, outline: { background: "transparent", color: "var(--ms-blue-700)", border: "2px solid var(--ms-blue-200)" }, ghost: { background: "transparent", color: "var(--ms-blue-700)" }, onbrand: { background: "#fff", color: "var(--ms-blue-700)" }, whatsapp: { background: "#25D366", color: "#fff", boxShadow: "0 8px 24px rgba(37,211,102,0.32)" }, }; const style = { ...base, ...sizes[size], ...variants[variant], ...extra }; const Comp = href ? "a" : "button"; return ( {icon && } {children} {iconAfter && } ); } /* ---------------- Icon circle ---------------- */ function IconCircle({ name, color = "accent", size = 48, stroke = 1.75 }) { const palette = { accent: { bg: "var(--site-accent-100)", fg: "var(--site-accent-700)" }, green: { bg: "var(--ms-green-100)", fg: "var(--ms-green-700)" }, blue: { bg: "var(--ms-blue-100)", fg: "var(--ms-blue-600)" }, "blue-solid": { bg: "var(--ms-blue-500)", fg: "#fff" }, "accent-solid": { bg: "var(--site-accent-500)", fg: "#fff" }, white: { bg: "rgba(255,255,255,0.18)", fg: "#fff" }, }; const { bg, fg } = palette[color] || palette.accent; return (
); } /* ---------------- Badge ---------------- */ function Badge({ children, variant = "soft-accent", icon }) { const styles = { "soft-accent": { background: "var(--site-accent-100)", color: "var(--site-accent-800)" }, "soft-green": { background: "var(--ms-green-100)", color: "var(--ms-green-800)" }, "soft-blue": { background: "var(--ms-blue-100)", color: "var(--ms-blue-700)" }, "solid-green": { background: "var(--ms-green-500)", color: "#fff" }, "solid-blue": { background: "var(--ms-blue-500)", color: "#fff" }, "solid-accent":{ background: "var(--site-accent-500)", color: "#fff" }, "outline": { background: "transparent", color: "var(--ms-blue-700)", border: "1.5px solid var(--ms-blue-200)" }, "warning": { background: "#FFF1D6", color: "#8A5A0A" }, "danger": { background: "#FDE4E4", color: "#7A2727" }, }; return {icon && } {children} ; } /* ---------------- Field ---------------- */ function Field({ label, type = "text", placeholder, hint, value, onChange, icon }) { const [focused, setFocused] = useState(false); return ( ); } /* ---------------- Doctor avatar (SVG placeholder) ---------------- */ function DoctorAvatar({ name = "", color = "blue", size = 64 }) { // Build initials const initials = name .replace(/^Dra?\.\s*/i, "") .split(" ") .filter(Boolean) .slice(0, 2) .map(w => w[0]) .join("") .toUpperCase() || "?"; const palettes = { blue: ["#296586", "#4d85a4"], green: ["#559143", "#8ccb71"], teal: ["#1a445f", "#7aa6bd"], sand: ["#a78c5e", "#d8c69a"], rose: ["#a4495e", "#d28799"], plum: ["#6f4a7a", "#a78bb0"], }; const [c1, c2] = palettes[color] || palettes.blue; return (
{initials}
); } /* ---------------- Card (basic) ---------------- */ function Card({ children, style = {}, accentBar = false, hoverable = false, padding = 24 }) { return (
{accentBar &&
} {children}
); } /* ---------------- WhatsApp brand mark (PNG) ---------------- Use this in prominent brand placements (bubble button, footer social, header phone link, "Recepção" channel card). Inside colored buttons keep `` — the SVG adapts to currentColor. */ function WhatsAppMark({ size = 24, className = "", style = {}, alt = "" }) { return ( {alt} ); } Object.assign(window, { Icon, Eyebrow, SectionTitle, Button, IconCircle, Badge, Field, DoctorAvatar, Card, WhatsAppMark });