diff --git a/frontend/components/screen/ScreenDesigner.tsx b/frontend/components/screen/ScreenDesigner.tsx index 92d3f560..4d644524 100644 --- a/frontend/components/screen/ScreenDesigner.tsx +++ b/frontend/components/screen/ScreenDesigner.tsx @@ -2338,45 +2338,43 @@ export default function ScreenDesigner({ selectedScreen, onBackToList }: ScreenD snapToGrid: layout.gridSettings?.snapToGrid, }); - // 웹타입별 기본 그리드 컬럼 수 계산 - const getDefaultGridColumns = (widgetType: string): number => { + // 웹타입별 기본 너비 계산 (10px 단위 고정) + const getDefaultWidth = (widgetType: string): number => { const widthMap: Record = { - // 텍스트 입력 계열 (넓게) - text: 4, // 1/3 (33%) - email: 4, // 1/3 (33%) - tel: 3, // 1/4 (25%) - url: 4, // 1/3 (33%) - textarea: 6, // 절반 (50%) + // 텍스트 입력 계열 + text: 200, + email: 200, + tel: 150, + url: 250, + textarea: 300, - // 숫자/날짜 입력 (중간) - number: 2, // 2/12 (16.67%) - decimal: 2, // 2/12 (16.67%) - date: 3, // 1/4 (25%) - datetime: 3, // 1/4 (25%) - time: 2, // 2/12 (16.67%) + // 숫자/날짜 입력 + number: 120, + decimal: 120, + date: 150, + datetime: 180, + time: 120, - // 선택 입력 (중간) - select: 3, // 1/4 (25%) - radio: 3, // 1/4 (25%) - checkbox: 2, // 2/12 (16.67%) - boolean: 2, // 2/12 (16.67%) + // 선택 입력 + select: 180, + radio: 180, + checkbox: 120, + boolean: 120, - // 코드/참조 (넓게) - code: 3, // 1/4 (25%) - entity: 4, // 1/3 (33%) + // 코드/참조 + code: 180, + entity: 200, - // 파일/이미지 (넓게) - file: 4, // 1/3 (33%) - image: 3, // 1/4 (25%) + // 파일/이미지 + file: 250, + image: 200, // 기타 - button: 2, // 2/12 (16.67%) - label: 2, // 2/12 (16.67%) + button: 100, + label: 100, }; - const defaultColumns = widthMap[widgetType] || 3; // 기본값 3 (1/4, 25%) - console.log("🎯 [ScreenDesigner] getDefaultGridColumns:", { widgetType, defaultColumns }); - return defaultColumns; + return widthMap[widgetType] || 200; // 기본값 200px }; // 웹타입별 기본 높이 계산 @@ -2544,24 +2542,12 @@ export default function ScreenDesigner({ selectedScreen, onBackToList }: ScreenD const componentId = getComponentIdFromWebType(column.widgetType); // console.log(`🔄 폼 컨테이너 드롭: ${column.widgetType} → ${componentId}`); - // 웹타입별 적절한 gridColumns 계산 - const calculatedGridColumns = getDefaultGridColumns(column.widgetType); - - // gridColumns에 맞는 실제 너비 계산 - const componentWidth = - currentGridInfo && layout.gridSettings?.snapToGrid - ? calculateWidthFromColumns( - calculatedGridColumns, - currentGridInfo, - layout.gridSettings as GridUtilSettings, - ) - : defaultWidth; + // 웹타입별 기본 너비 계산 (10px 단위 고정) + const componentWidth = getDefaultWidth(column.widgetType); console.log("🎯 폼 컨테이너 컴포넌트 생성:", { widgetType: column.widgetType, - calculatedGridColumns, componentWidth, - defaultWidth, }); newComponent = { @@ -2576,7 +2562,6 @@ export default function ScreenDesigner({ selectedScreen, onBackToList }: ScreenD componentType: componentId, // DynamicComponentRenderer용 컴포넌트 타입 position: { x: relativeX, y: relativeY, z: 1 } as Position, size: { width: componentWidth, height: getDefaultHeight(column.widgetType) }, - gridColumns: calculatedGridColumns, // 코드 타입인 경우 코드 카테고리 정보 추가 ...(column.widgetType === "code" && column.codeCategory && { @@ -2588,7 +2573,6 @@ export default function ScreenDesigner({ selectedScreen, onBackToList }: ScreenD labelColor: "#212121", labelFontWeight: "500", labelMarginBottom: "6px", - width: `${(calculatedGridColumns / (layout.gridSettings?.columns || 12)) * 100}%`, // 퍼센트 너비 }, componentConfig: { type: componentId, // text-input, number-input 등 @@ -2611,36 +2595,14 @@ export default function ScreenDesigner({ selectedScreen, onBackToList }: ScreenD const componentId = getComponentIdFromWebType(column.widgetType); // console.log(`🔄 캔버스 드롭: ${column.widgetType} → ${componentId}`); - // 웹타입별 적절한 gridColumns 계산 - const calculatedGridColumns = getDefaultGridColumns(column.widgetType); - - // gridColumns에 맞는 실제 너비 계산 - const componentWidth = - currentGridInfo && layout.gridSettings?.snapToGrid - ? calculateWidthFromColumns( - calculatedGridColumns, - currentGridInfo, - layout.gridSettings as GridUtilSettings, - ) - : defaultWidth; + // 웹타입별 기본 너비 계산 (10px 단위 고정) + const componentWidth = getDefaultWidth(column.widgetType); console.log("🎯 캔버스 컴포넌트 생성:", { widgetType: column.widgetType, - calculatedGridColumns, componentWidth, - defaultWidth, }); - // 🔍 이미지 타입 드래그앤드롭 디버깅 - // if (column.widgetType === "image") { - // console.log("🖼️ 이미지 컬럼 드래그앤드롭:", { - // columnName: column.columnName, - // widgetType: column.widgetType, - // componentId, - // column, - // }); - // } - newComponent = { id: generateComponentId(), type: "component", // ✅ 새로운 컴포넌트 시스템 사용 @@ -2652,7 +2614,6 @@ export default function ScreenDesigner({ selectedScreen, onBackToList }: ScreenD componentType: componentId, // DynamicComponentRenderer용 컴포넌트 타입 position: { x, y, z: 1 } as Position, size: { width: componentWidth, height: getDefaultHeight(column.widgetType) }, - gridColumns: calculatedGridColumns, // 코드 타입인 경우 코드 카테고리 정보 추가 ...(column.widgetType === "code" && column.codeCategory && { @@ -2664,7 +2625,6 @@ export default function ScreenDesigner({ selectedScreen, onBackToList }: ScreenD labelColor: "#000000", // 순수한 검정 labelFontWeight: "500", labelMarginBottom: "8px", - width: `${(calculatedGridColumns / (layout.gridSettings?.columns || 12)) * 100}%`, // 퍼센트 너비 }, componentConfig: { type: componentId, // text-input, number-input 등 diff --git a/frontend/components/screen/panels/GridPanel.tsx b/frontend/components/screen/panels/GridPanel.tsx index f33cc601..82bb4fc4 100644 --- a/frontend/components/screen/panels/GridPanel.tsx +++ b/frontend/components/screen/panels/GridPanel.tsx @@ -128,49 +128,14 @@ export const GridPanel: React.FC = ({ {/* 설정 영역 */}
- {/* 격자 구조 */} + {/* 격자 구조 - 10px 단위 */}
-

격자 구조

+

격자 크기 (10px 단위)

-
- -
- { - const value = parseInt(e.target.value, 10); - if (!isNaN(value) && value >= 1 && value <= safeMaxColumns) { - updateSetting("columns", value); - } - }} - className="h-8 text-xs" - /> - / {safeMaxColumns} -
- updateSetting("columns", value)} - className="w-full" - /> -
- 1열 - {safeMaxColumns}열 -
- {isColumnsTooSmall && ( -

- ⚠️ 컬럼 너비가 너무 작습니다 (최소 {MIN_COLUMN_WIDTH}px 권장) -

- )} +
+

+ 모든 컴포넌트는 10px 단위로 배치되고 크기가 조정됩니다. +

@@ -181,7 +146,7 @@ export const GridPanel: React.FC = ({ id="gap" min={0} max={40} - step={2} + step={10} value={[gridSettings.gap]} onValueChange={([value]) => updateSetting("gap", value)} className="w-full" @@ -200,7 +165,7 @@ export const GridPanel: React.FC = ({ id="padding" min={0} max={60} - step={4} + step={10} value={[gridSettings.padding]} onValueChange={([value]) => updateSetting("padding", value)} className="w-full" @@ -288,14 +253,14 @@ export const GridPanel: React.FC = ({
💡 격자 설정은 실시간으로 캔버스에 반영됩니다
- {/* 해상도 및 격자 정보 */} - {screenResolution && actualGridInfo && ( + {/* 해상도 정보 */} + {screenResolution && ( <> -
-

격자 정보

+
+

화면 정보

-
+
해상도: @@ -304,25 +269,9 @@ export const GridPanel: React.FC = ({
- 컬럼 너비: - - {actualGridInfo.columnWidth.toFixed(1)}px - {isColumnsTooSmall && " (너무 작음)"} - + 격자 단위: + 10px
- -
- 사용 가능 너비: - - {(screenResolution.width - gridSettings.padding * 2).toLocaleString()}px - -
- - {isColumnsTooSmall && ( -
- 💡 컬럼이 너무 작습니다. 컬럼 수를 줄이거나 간격을 줄여보세요. -
- )}