UNPKG

@medalsocial/meda

Version:

Shared Meda UI shell and runtime package.

216 lines (215 loc) 5.51 kB
import type { MouseEventHandler, ReactNode } from 'react'; export type MarketingCtaVariant = 'primary' | 'secondary'; export type MarketingAlign = 'start' | 'center'; export interface MarketingCta { label: ReactNode; href?: string; onClick?: MouseEventHandler<HTMLButtonElement>; variant?: MarketingCtaVariant; ariaLabel?: string; target?: string; rel?: string; } export interface MarketingCtaListProps { ctas?: MarketingCta[]; align?: MarketingAlign; className?: string; } export type MarketingCalloutVariant = 'band' | 'card'; export interface MarketingCalloutProps { eyebrow?: ReactNode; title: ReactNode; description?: ReactNode; children?: ReactNode; ctas?: MarketingCta[]; variant?: MarketingCalloutVariant; align?: MarketingAlign; className?: string; } export interface MarketingOffice { title?: ReactNode; address?: ReactNode; email?: string; phone?: string; hours?: ReactNode; } export interface MarketingContactPerson { title?: ReactNode; name: ReactNode; role?: ReactNode; description?: ReactNode; image?: ReactNode; email?: string; phone?: string; } export interface MarketingContactProps { intro?: ReactNode; form: ReactNode; office?: MarketingOffice; contactPerson?: MarketingContactPerson; compact?: boolean; className?: string; } export type MarketingLeadMagnetVariant = 'featured' | 'sidebar'; export interface MarketingLeadMagnetProps { title: ReactNode; description?: ReactNode; benefits?: ReactNode[]; image?: ReactNode; buttonText?: ReactNode; formTitle?: ReactNode; form?: ReactNode; variant?: MarketingLeadMagnetVariant; open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; className?: string; } export interface MarketingHeaderUser { name: string; email?: string; image?: string; workspaceSlug?: string; } interface MarketingNavItemBase { id: string; label: ReactNode; } export interface MarketingNavLinkItem extends MarketingNavItemBase { href: string; hasMenu?: false; panel?: never; } export interface MarketingNavMenuItem extends MarketingNavItemBase { hasMenu: true; href?: string; panel?: ReactNode; } export type MarketingNavItemDescriptor = MarketingNavLinkItem | MarketingNavMenuItem; export interface MarketingHeaderProps { logo?: ReactNode; navItems?: MarketingNavItemDescriptor[]; user?: MarketingHeaderUser | null; signInHref?: string; signUpHref?: string; appHref?: string; rightSlot?: ReactNode; toggles?: ReactNode; renderLoggedOut?: (defaults: { signInHref: string; signUpHref: string; }) => ReactNode; renderLoggedIn?: (user: MarketingHeaderUser, defaults: { appHref: string; }) => ReactNode; className?: string; } export interface MarketingShellProps { header?: ReactNode; footer?: ReactNode; children?: ReactNode; className?: string; } export interface MarketingFooterColumn { title: ReactNode; links: Array<{ label: ReactNode; href: string; }>; } export interface MarketingFooterProps { brand?: ReactNode; tagline?: ReactNode; columns?: MarketingFooterColumn[]; bottomSlot?: ReactNode; className?: string; } export interface MarketingTrustStat { value: ReactNode; label: ReactNode; caption?: ReactNode; } export interface MarketingTrustBarProps { eyebrow?: ReactNode; title?: ReactNode; stats: MarketingTrustStat[]; className?: string; } export interface MarketingBentoGridProps { cols?: 2 | 3 | 4 | 6 | 12; children?: ReactNode; className?: string; } export interface MarketingBentoCardProps { colSpan?: 1 | 2 | 3 | 4 | 6 | 12; rowSpan?: 1 | 2 | 3; variant?: 'default' | 'feature' | 'compact'; icon?: ReactNode; title?: ReactNode; description?: ReactNode; children?: ReactNode; href?: string; className?: string; } export interface MarketingFAQItem { id: string; question: ReactNode; answer: ReactNode; } export interface MarketingFAQProps { eyebrow?: ReactNode; title?: ReactNode; items: MarketingFAQItem[]; defaultOpenId?: string; className?: string; } export interface MarketingMegaMenuFeature { id: string; icon?: ReactNode; title: ReactNode; description?: ReactNode; href: string; } export interface MarketingMegaMenuProps { triggerId: string; open: boolean; onOpenChange: (open: boolean) => void; features?: MarketingMegaMenuFeature[]; children?: ReactNode; className?: string; } export interface MarketingAnnouncementBarProps { href?: string; icon?: ReactNode; children: ReactNode; className?: string; } export interface MarketingHeroProps { eyebrow?: ReactNode; headline: ReactNode; subtitle?: ReactNode; ctas?: ReactNode; meta?: ReactNode; productMockup?: ReactNode; className?: string; } export interface MarketingNumberedFeature { id: string; index: ReactNode; title: ReactNode; description: ReactNode; } export interface MarketingNumberedFeaturesProps { eyebrow?: ReactNode; title?: ReactNode; features: MarketingNumberedFeature[]; className?: string; } export interface MarketingCTAProps { eyebrow?: ReactNode; title: ReactNode; subtitle?: ReactNode; ctas?: ReactNode; className?: string; } export {};