79 lines
2.0 KiB
TypeScript
79 lines
2.0 KiB
TypeScript
"use client";
|
|
|
|
import type { Block, SectionBlockProps, TextBlockProps, ButtonBlockProps } from "@/features/editor/state/editorStore";
|
|
|
|
export function createCtaTemplateBlocks(opts: {
|
|
sectionId: string;
|
|
createId: () => string;
|
|
}): { blocks: Block[]; lastSelectedId: string } {
|
|
const { sectionId, createId } = opts;
|
|
|
|
const columns: SectionBlockProps["columns"] = [
|
|
{ id: `${sectionId}_col_1`, span: 8 },
|
|
{ id: `${sectionId}_col_2`, span: 4 },
|
|
];
|
|
|
|
const sectionProps: SectionBlockProps = {
|
|
background: "primary",
|
|
paddingY: "md",
|
|
// CTA 는 강한 색상과 적당한 여백, 비교적 좁은 폭을 사용한다.
|
|
paddingYPx: 64,
|
|
maxWidthPx: 960,
|
|
gapXPx: 24,
|
|
backgroundColorCustom: "#0c4a6e",
|
|
columns,
|
|
} as any;
|
|
|
|
const sectionBlock: Block = {
|
|
id: sectionId,
|
|
type: "section",
|
|
props: sectionProps,
|
|
sectionId: null,
|
|
columnId: null,
|
|
};
|
|
|
|
const leftColumnId = `${sectionId}_col_1`;
|
|
const rightColumnId = `${sectionId}_col_2`;
|
|
|
|
const textId = createId();
|
|
const textProps: TextBlockProps = {
|
|
text: "지금 바로 행동을 유도하는 CTA 텍스트를 입력하세요.\n망설이지 말고 시작하세요!",
|
|
align: "left",
|
|
size: "lg",
|
|
} as any;
|
|
const textBlock: Block = {
|
|
id: textId,
|
|
type: "text",
|
|
props: textProps,
|
|
sectionId,
|
|
columnId: leftColumnId,
|
|
};
|
|
|
|
const buttonId = createId();
|
|
const buttonProps: ButtonBlockProps = {
|
|
label: "CTA 버튼",
|
|
href: "#",
|
|
align: "center",
|
|
size: "lg",
|
|
variant: "solid",
|
|
colorPalette: "primary",
|
|
fullWidth: true,
|
|
borderRadius: "md",
|
|
textColorCustom: "#0b1120",
|
|
fillColorCustom: "#0ea5e9",
|
|
strokeColorCustom: "#0284c7",
|
|
};
|
|
const buttonBlock: Block = {
|
|
id: buttonId,
|
|
type: "button",
|
|
props: buttonProps,
|
|
sectionId,
|
|
columnId: rightColumnId,
|
|
};
|
|
|
|
const blocks: Block[] = [sectionBlock, textBlock, buttonBlock];
|
|
const lastSelectedId = buttonId;
|
|
|
|
return { blocks, lastSelectedId };
|
|
}
|