import React from 'react'; import type { HeroAction, HeroAlign, HeroProps } from '../../../../types/hero'; import { Button } from '../../../button/public'; import { Card } from '../../../card/public'; import { Grid, View } from '../../../layout/public'; import { withZoraThemeScope } from '../../../theme/adapters/inbound/withZoraThemeScope'; import { Heading, Text } from '../../../typography/public'; function HeroInner({ themeId: _themeId, mode: _mode, interactionPolicy, title, description, eyebrow, primaryAction, secondaryAction, media, footer, align = 'start', layout = 'split', tone = 'subtle', compact = false, testID, }: HeroProps) { const hasActions = primaryAction !== undefined || secondaryAction !== undefined; const hasMedia = media !== undefined; const contentAlign = resolveContentAlign(align); const textAlign = align === 'center' ? 'center' : undefined; const mediaFirst = layout === 'mediaFirst'; const content = ( {eyebrow !== undefined ? ( {eyebrow} ) : null} {title} {description !== undefined ? ( {description} ) : null} {hasActions ? ( {primaryAction !== undefined ? renderAction(primaryAction, 'primary', interactionPolicy) : null} {secondaryAction !== undefined ? renderAction(secondaryAction, 'secondary', interactionPolicy) : null} ) : null} {footer} ); const mediaSlot = hasMedia ? {media} : null; const body = hasMedia && layout !== 'stack' ? ( {mediaFirst ? mediaSlot : content} {mediaFirst ? content : mediaSlot} ) : ( {mediaFirst ? mediaSlot : content} {mediaFirst ? content : mediaSlot} ); return ( {body} ); } function renderAction( action: HeroAction, role: 'primary' | 'secondary', interactionPolicy: HeroProps['interactionPolicy'], ) { return ( ); } function resolveContentAlign(align: HeroAlign) { return align === 'center' ? 'center' : 'flex-start'; } /*** * Hero section pattern for prominent page introductions with actions. * */ export const Hero = withZoraThemeScope(HeroInner);