이미지 파일 업로드 기능
This commit is contained in:
@@ -125,6 +125,12 @@ export interface ImageBlockProps {
|
||||
widthPx?: number;
|
||||
// 모서리 둥글기
|
||||
borderRadius?: "none" | "sm" | "md" | "lg" | "full";
|
||||
// 모서리 둥글기 px 값 (이미지에 한해서는 연속적인 px 단위 조정을 지원한다)
|
||||
borderRadiusPx?: number;
|
||||
// 이미지 소스 타입: 업로드된 에셋 또는 외부 URL
|
||||
sourceType?: "asset" | "externalUrl";
|
||||
// 업로드된 에셋인 경우 Asset.id 를 저장해둔다.
|
||||
assetId?: string | null;
|
||||
}
|
||||
|
||||
// 구분선 블록 속성
|
||||
@@ -553,6 +559,8 @@ export interface FormCheckboxBlockProps extends FormFieldStyleProps {
|
||||
// 그룹 타이틀 자체도 텍스트/이미지 모드를 가질 수 있도록 분리한다.
|
||||
groupLabelMode?: FormLabelMode;
|
||||
groupLabelImageUrl?: string;
|
||||
groupLabelImageSource?: "url" | "upload";
|
||||
optionImageSource?: "url" | "upload";
|
||||
}
|
||||
|
||||
// 폼 라디오 그룹 옵션/블록 속성
|
||||
@@ -571,6 +579,8 @@ export interface FormRadioBlockProps extends FormFieldStyleProps {
|
||||
// 라디오 그룹 타이틀의 텍스트/이미지 모드
|
||||
groupLabelMode?: FormLabelMode;
|
||||
groupLabelImageUrl?: string;
|
||||
groupLabelImageSource?: "url" | "upload";
|
||||
optionImageSource?: "url" | "upload";
|
||||
}
|
||||
|
||||
// 폼 필드 설정
|
||||
@@ -611,6 +621,19 @@ export interface FormBlockProps {
|
||||
marginYPx?: number;
|
||||
}
|
||||
|
||||
export type CanvasPreset = "mobile" | "tablet" | "desktop" | "full" | "custom";
|
||||
|
||||
export interface ProjectConfig {
|
||||
title: string;
|
||||
slug: string;
|
||||
canvasPreset: CanvasPreset;
|
||||
canvasWidthPx?: number;
|
||||
canvasBgColorHex?: string;
|
||||
bodyBgColorHex?: string;
|
||||
headHtml?: string;
|
||||
trackingScript?: string;
|
||||
}
|
||||
|
||||
// 공통 블록 모델
|
||||
export interface Block {
|
||||
id: string;
|
||||
@@ -639,6 +662,8 @@ export interface EditorState {
|
||||
selectedListItemId?: string | null;
|
||||
history: Block[][];
|
||||
future: Block[][];
|
||||
projectConfig: ProjectConfig;
|
||||
updateProjectConfig: (partial: Partial<ProjectConfig>) => void;
|
||||
addTextBlock: () => void;
|
||||
addButtonBlock: () => void;
|
||||
addImageBlock: () => void;
|
||||
@@ -716,6 +741,24 @@ const createEditorState = (set: any, get: any): EditorState => ({
|
||||
selectedListItemId: null,
|
||||
history: [],
|
||||
future: [],
|
||||
projectConfig: {
|
||||
title: "새 페이지",
|
||||
slug: "my-landing",
|
||||
canvasPreset: "full",
|
||||
canvasBgColorHex: "#020617",
|
||||
bodyBgColorHex: "#020617",
|
||||
headHtml: "",
|
||||
trackingScript: "",
|
||||
},
|
||||
|
||||
updateProjectConfig: (partial: Partial<ProjectConfig>) => {
|
||||
set((state: EditorState) => ({
|
||||
projectConfig: {
|
||||
...state.projectConfig,
|
||||
...partial,
|
||||
},
|
||||
}));
|
||||
},
|
||||
|
||||
// 텍스트 블록 추가: 기본 텍스트와 함께 생성 후 선택 상태로 만든다
|
||||
addTextBlock: () => {
|
||||
|
||||
Reference in New Issue
Block a user