diff --git a/src/app/api/image/[id]/route.ts b/src/app/api/image/[id]/route.ts index 5dff221..83d3ce6 100644 --- a/src/app/api/image/[id]/route.ts +++ b/src/app/api/image/[id]/route.ts @@ -14,27 +14,21 @@ try { prisma = null; } -interface Params { - params: { - id: string; - }; -} +export async function GET(request: Request) { + // Next.js 15 이후 params 가 Promise 로 전달되는 경고를 피하기 위해, + // 동적 세그먼트는 request.url 의 path 에서 직접 파싱한다. + let id: string | undefined; -export async function GET(request: Request, ctx: Params) { - // Next.js 가 params 를 항상 보장하지 않는 상황을 대비해, URL 경로에서 id 를 보완적으로 파싱한다. - let id: string | undefined = ctx?.params?.id; - if (!id) { - try { - const url = new URL(request.url); - const segments = url.pathname.split("/").filter(Boolean); - // [..., "api", "image", ":id"] 형태를 기대한다. - const last = segments[segments.length - 1]; - if (last && last !== "image") { - id = last; - } - } catch { - // URL 파싱 실패 시에는 그대로 둔다. + try { + const url = new URL(request.url); + const segments = url.pathname.split("/").filter(Boolean); + // [..., "api", "image", ":id"] 형태를 기대한다. + const last = segments[segments.length - 1]; + if (last && last !== "image") { + id = last; } + } catch { + // URL 파싱 실패 시에는 그대로 둔다. } if (!id) { diff --git a/src/app/editor/forms/FormControllerPanel.tsx b/src/app/editor/forms/FormControllerPanel.tsx index a3d5996..970c058 100644 --- a/src/app/editor/forms/FormControllerPanel.tsx +++ b/src/app/editor/forms/FormControllerPanel.tsx @@ -1,6 +1,7 @@ "use client"; import type { Block, ButtonBlockProps, FormBlockProps } from "@/features/editor/state/editorStore"; +import { NumericPropertyControl } from "@/features/editor/components/NumericPropertyControl"; interface FormControllerPanelProps { block: Block; // type === "form" @@ -129,6 +130,65 @@ export function FormControllerPanel({ block, blocks, selectedBlockId, updateBloc )} +
+

폼 레이아웃

+ + {(formProps.formWidthMode ?? "auto") === "fixed" && ( + + updateBlock(selectedBlockId, { + formWidthPx: v, + } as any) + } + /> + )} + + updateBlock(selectedBlockId, { + marginYPx: v, + } as any) + } + /> +
+

폼 메시지