export type TwitterCardType = | "summary" | "summary_large_image" | "app" | "player"; // Link interface matching astro-seo's Link (which extends HTMLLinkElement) // href must be string (not URL) to match astro-seo's expectations export interface Link { rel?: string; href?: string; // Only string, not URL hreflang?: string; media?: string; type?: string; sizes?: string; prefetch?: boolean; crossorigin?: string; as?: string; [key: string]: any; } export interface Meta { property?: string; name?: string; content?: string; httpEquiv?: string; charset?: string; [key: string]: any; } export interface SeoProperties { title?: string; titleTemplate?: string; titleDefault?: string; charset?: string; description?: string; canonical?: URL | string; nofollow?: boolean; noindex?: boolean; languageAlternates?: { href: URL | string; hrefLang: string; }[]; openGraph?: { basic: { title: string; type: string; image: string; url?: URL | string; }; optional?: { audio?: string; description?: string; determiner?: string; locale?: string; localeAlternate?: string[]; siteName?: string; video?: string; }; image?: { url?: URL | string; secureUrl?: URL | string; type?: string; width?: number; height?: number; alt?: string; }; article?: { publishedTime?: string; modifiedTime?: string; expirationTime?: string; authors?: string[]; section?: string; tags?: string[]; }; }; twitter?: { card?: TwitterCardType; site?: string; creator?: string; title?: string; description?: string; image?: URL | string; imageAlt?: string; }; extend?: { link?: Partial[]; meta?: Partial[]; }; surpressWarnings?: boolean; }