import type { CSSProperties, ReactNode } from "react"; /** Endereço mostrado na barra: o do site publicado, ou o do código quando não há demonstração. */ export function displayUrl(project: { demoUrl?: string | null; githubUrl?: string | null; }): { text: string; secure: boolean } | null { for (const raw of [project.demoUrl, project.githubUrl]) { if (!raw) continue; try { const url = new URL(raw); const path = url.pathname === "/" ? "" : url.pathname.replace(/\/$/, ""); return { text: `${url.host.replace(/^www\./, "")}${path}`, secure: url.protocol === "https:", }; } catch {} } return null; } /** * Janela de navegador em volta da captura: três pontos, barra com o endereço real e a tela. * A barra é decoração (aria-hidden); o endereço também aparece como texto no próprio card. */ export function BrowserFrame({ url, children, className = "", style, }: { url: { text: string; secure: boolean } | null; children: ReactNode; className?: string; style?: CSSProperties; }) { return (
{children}
); }