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);