diff --git a/next-env.d.ts b/next-env.d.ts index 9edff1c..c4b7818 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/types/routes.d.ts"; +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/src/app/api/export/route.ts b/src/app/api/export/route.ts index 5d26b85..c6b52e8 100644 --- a/src/app/api/export/route.ts +++ b/src/app/api/export/route.ts @@ -81,8 +81,10 @@ export const buildStaticHtml = (blocks: Block[], projectConfig?: ProjectConfig): const basePart = "margin:0 auto;padding:24px;box-sizing:border-box;"; const canvasStyle = `${widthPart}${bgPart}${basePart}`; - const bodyBgRaw = (projectConfig?.bodyBgColorHex ?? "#020617").trim() || "#020617"; - const bodyStyle = `background-color:${bodyBgRaw};margin:0;padding:0;`; + const bodyBgRaw = + typeof projectConfig?.bodyBgColorHex === "string" ? projectConfig.bodyBgColorHex.trim() : ""; + const bodyBgPart = bodyBgRaw ? `background-color:${bodyBgRaw};` : ""; + const bodyStyle = `${bodyBgPart}margin:0;padding:0;`; const trackingRaw = (projectConfig?.trackingScript ?? "").trim(); const trackingHtml = trackingRaw ? `\n${trackingRaw}\n` : ""; @@ -460,12 +462,19 @@ export const buildStaticHtml = (blocks: Block[], projectConfig?: ProjectConfig): const inputId = name; const fieldClass = isFloating ? "pb-form-field pb-form-field--floating" : "pb-form-field"; - let fieldStyleAttr = ""; + const cssVars: string[] = []; if (isFloating && typeof props.paddingY === "number" && props.paddingY >= 0) { const em = props.paddingY / 16; - fieldStyleAttr = ` style="--pb-input-padding-y:${em}rem"`; + cssVars.push(`--pb-input-padding-y:${em}rem`); } + // strokeColorCustom 이 있으면 플로팅 라벨 패치 색으로 사용할 CSS 변수에 전달한다. + if (typeof props.strokeColorCustom === "string" && props.strokeColorCustom.trim() !== "") { + cssVars.push(`--pb-input-border-color:${escapeAttr(props.strokeColorCustom.trim())}`); + } + + const fieldStyleAttr = cssVars.length > 0 ? ` style="${cssVars.join(";")}"` : ""; + const placeholderBase = typeof props.placeholder === "string" && props.placeholder.trim() !== "" ? props.placeholder.trim() diff --git a/src/app/editor/EditorCanvas.tsx b/src/app/editor/EditorCanvas.tsx index 4501223..01e106a 100644 --- a/src/app/editor/EditorCanvas.tsx +++ b/src/app/editor/EditorCanvas.tsx @@ -70,7 +70,7 @@ export function EditorCanvas(props: EditorCanvasProps) { return (
{ @@ -118,11 +118,11 @@ interface DragPreviewProps { block: Block | null; } -function DragPreview({ block }: DragPreviewProps) { +export function EditorCanvasDragPreview({ block }: DragPreviewProps) { if (!block) return null; return ( -
+
{block.type === "text" ? "Text" @@ -152,3 +152,7 @@ function DragPreview({ block }: DragPreviewProps) {
); } + +function DragPreview({ block }: DragPreviewProps) { + return ; +} diff --git a/src/app/editor/forms/FormCheckboxPropertiesPanel.tsx b/src/app/editor/forms/FormCheckboxPropertiesPanel.tsx index 4a99103..4196a7e 100644 --- a/src/app/editor/forms/FormCheckboxPropertiesPanel.tsx +++ b/src/app/editor/forms/FormCheckboxPropertiesPanel.tsx @@ -18,12 +18,12 @@ export function FormCheckboxPropertiesPanel({ block, selectedBlockId, updateBloc return (
-

체크박스 필드

+

체크박스 필드

{groupLabelDisplay === "visible" && ( -