`backend` 옆에 `front` 가 있을 이유가 없었다. negosium 의 negodata/front 를 그대로 베꼈고 그게 왜 front 인지는 따져보지 않았다 — 근거 없이 들여온 이름이라 바로잡는다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019uYhHQdssRubirPirrdJJC
30 lines
1.0 KiB
TypeScript
30 lines
1.0 KiB
TypeScript
/**
|
|
* 체험 프로그램 · 카드 — 소요시간·대상까지 붙여 한 장씩. 처음 오는 손님이 고르기 쉽다.
|
|
*/
|
|
import {PriceRow, SectionBody, SectionFrame, SectionHeading} from '../../primitives';
|
|
import type {SectionRenderProps} from '../../types';
|
|
import {programItems} from './useProgramItems';
|
|
|
|
export function ProgramsCards(props: SectionRenderProps) {
|
|
const {section, isSelected, onSelect, industryId, template} = props;
|
|
const items = programItems(industryId);
|
|
|
|
return (
|
|
<SectionFrame section={section} isSelected={isSelected} onSelect={onSelect} tone="white">
|
|
<SectionBody>
|
|
<SectionHeading
|
|
title={section.name}
|
|
subtitle={section.description}
|
|
colors={template.colors}
|
|
/>
|
|
|
|
<div className="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3">
|
|
{items.map((item) => (
|
|
<PriceRow key={item.name} item={item} variant="card" colors={template.colors} />
|
|
))}
|
|
</div>
|
|
</SectionBody>
|
|
</SectionFrame>
|
|
);
|
|
}
|