diff --git a/frontend/components/screen/FloatingPanel.tsx b/frontend/components/screen/FloatingPanel.tsx index fc3bd2a6..cddb053b 100644 --- a/frontend/components/screen/FloatingPanel.tsx +++ b/frontend/components/screen/FloatingPanel.tsx @@ -114,11 +114,11 @@ export const FloatingPanel: React.FC = ({ const newHeight = Math.min(Math.max(minHeight, contentHeight + headerHeight + padding), maxHeight); // console.log(`๐Ÿ”ง ํŒจ๋„ ๋†’์ด ์ž๋™ ์กฐ์ •:`, { - // panelId: id, - // contentHeight, - // calculatedHeight: newHeight, - // currentHeight: panelSize.height, - // willUpdate: Math.abs(panelSize.height - newHeight) > 10, + // panelId: id, + // contentHeight, + // calculatedHeight: newHeight, + // currentHeight: panelSize.height, + // willUpdate: Math.abs(panelSize.height - newHeight) > 10, // }); // ํ˜„์žฌ ๋†’์ด์™€ ๋‹ค๋ฅด๋ฉด ์—…๋ฐ์ดํŠธ @@ -227,7 +227,7 @@ export const FloatingPanel: React.FC = ({
= ({ height: `${panelSize.height}px`, transform: isDragging ? "scale(1.01)" : "scale(1)", transition: isDragging ? "none" : "transform 0.1s ease-out, box-shadow 0.1s ease-out", - zIndex: isDragging ? 101 : 100, // ํ•ญ์ƒ ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ์œ„์— ํ‘œ์‹œ + zIndex: isDragging ? 101 : 100, }} > {/* ํ—ค๋” */}
-
- -

{title}

+
+ +

{title}

-
@@ -282,7 +282,7 @@ export const FloatingPanel: React.FC = ({ {/* ๋ฆฌ์‚ฌ์ด์ฆˆ ํ•ธ๋“ค */} {resizable && !autoHeight && (
-
+
)}
diff --git a/frontend/components/screen/RealtimePreviewDynamic.tsx b/frontend/components/screen/RealtimePreviewDynamic.tsx index de16484a..cdf74ff4 100644 --- a/frontend/components/screen/RealtimePreviewDynamic.tsx +++ b/frontend/components/screen/RealtimePreviewDynamic.tsx @@ -83,9 +83,9 @@ export const RealtimePreviewDynamic: React.FC = ({ // ์„ ํƒ ์ƒํƒœ์— ๋”ฐ๋ฅธ ์Šคํƒ€์ผ (z-index ๋‚ฎ์ถค - ํŒจ๋„๊ณผ ๋ชจ๋‹ฌ๋ณด๋‹ค ์•„๋ž˜) const selectionStyle = isSelected ? { - outline: "2px solid #3b82f6", + outline: "2px solid hsl(var(--primary))", outlineOffset: "2px", - zIndex: 20, // ํŒจ๋„๊ณผ ๋ชจ๋‹ฌ๋ณด๋‹ค ๋‚ฎ๊ฒŒ ์„ค์ • + zIndex: 20, } : {}; @@ -183,16 +183,16 @@ export const RealtimePreviewDynamic: React.FC = ({ {/* ์„ ํƒ๋œ ์ปดํฌ๋„ŒํŠธ ์ •๋ณด ํ‘œ์‹œ */} {isSelected && ( -
+
{type === "widget" && ( -
+
{getWidgetIcon((component as WidgetComponent).widgetType)} - {(component as WidgetComponent).widgetType || "widget"} + {(component as WidgetComponent).widgetType || "widget"}
)} {type !== "widget" && ( -
- {component.componentConfig?.type || type} +
+ {component.componentConfig?.type || type}
)}
diff --git a/frontend/components/screen/StyleEditor.tsx b/frontend/components/screen/StyleEditor.tsx index 2d2e7acd..706ee8a1 100644 --- a/frontend/components/screen/StyleEditor.tsx +++ b/frontend/components/screen/StyleEditor.tsx @@ -28,79 +28,91 @@ export default function StyleEditor({ style, onStyleChange, className }: StyleEd }; return ( -
+
{/* ์—ฌ๋ฐฑ ์„น์…˜ */} -
+
- -

์—ฌ๋ฐฑ

+ +

์—ฌ๋ฐฑ

- -
-
-
- + +
+
+
+ handleStyleChange("margin", e.target.value)} + className="h-8" />
-
- +
+ handleStyleChange("padding", e.target.value)} + className="h-8" />
-
-
- - handleStyleChange("gap", e.target.value)} - /> -
+
+ + handleStyleChange("gap", e.target.value)} + className="h-8" + />
{/* ํ…Œ๋‘๋ฆฌ ์„น์…˜ */} -
+
- -

ํ…Œ๋‘๋ฆฌ

+ +

ํ…Œ๋‘๋ฆฌ

- -
-
-
- + +
+
+
+ handleStyleChange("borderWidth", e.target.value)} + className="h-8" />
-
- +
+ handleStyleChange("borderColor", e.target.value)} - /> +
+
+ +
+ handleStyleChange("borderColor", e.target.value)} + className="h-8 w-14 p-1" + /> + handleStyleChange("borderColor", e.target.value)} + placeholder="#000000" + className="h-8 flex-1" + /> +
-
- +
+ handleStyleChange("borderRadius", e.target.value)} + className="h-8" />
@@ -138,74 +165,106 @@ export default function StyleEditor({ style, onStyleChange, className }: StyleEd
{/* ๋ฐฐ๊ฒฝ ์„น์…˜ */} -
+
- -

๋ฐฐ๊ฒฝ

+ +

๋ฐฐ๊ฒฝ

- -
-
- - handleStyleChange("backgroundColor", e.target.value)} - /> + +
+
+ +
+ handleStyleChange("backgroundColor", e.target.value)} + className="h-8 w-14 p-1" + /> + handleStyleChange("backgroundColor", e.target.value)} + placeholder="#ffffff" + className="h-8 flex-1" + /> +
-
- +
+ handleStyleChange("backgroundImage", e.target.value)} + className="h-8" />
{/* ํ…์ŠคํŠธ ์„น์…˜ */} -
+
- -

ํ…์ŠคํŠธ

+ +

ํ…์ŠคํŠธ

- -
-
-
- - handleStyleChange("color", e.target.value)} - /> + +
+
+
+ +
+ handleStyleChange("color", e.target.value)} + className="h-8 w-14 p-1" + /> + handleStyleChange("color", e.target.value)} + placeholder="#000000" + className="h-8 flex-1" + /> +
-
- +
+ handleStyleChange("fontSize", e.target.value)} + className="h-8" />
-
-
- +
+
+
-
- +
+ setSearchQuery(e.target.value)} - className="border-0 bg-white/80 pl-10 shadow-sm backdrop-blur-sm transition-colors focus:bg-white" + className="h-8 pl-8 text-xs" />
{/* ์นดํ…Œ๊ณ ๋ฆฌ ํƒญ */} - - + + - ์ž…๋ ฅ + ์ž…๋ ฅ - + - ์•ก์…˜ + ์•ก์…˜ - + - ํ‘œ์‹œ + ํ‘œ์‹œ - + - ๋ ˆ์ด์•„์›ƒ + ๋ ˆ์ด์•„์›ƒ {/* ์ž…๋ ฅ ์ปดํฌ๋„ŒํŠธ */} - + {getFilteredComponents("input").length > 0 ? getFilteredComponents("input").map(renderComponentCard) : renderEmptyState()} {/* ์•ก์…˜ ์ปดํฌ๋„ŒํŠธ */} - + {getFilteredComponents("action").length > 0 ? getFilteredComponents("action").map(renderComponentCard) : renderEmptyState()} {/* ํ‘œ์‹œ ์ปดํฌ๋„ŒํŠธ */} - + {getFilteredComponents("display").length > 0 ? getFilteredComponents("display").map(renderComponentCard) : renderEmptyState()} {/* ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ */} - + {getFilteredComponents("layout").length > 0 ? getFilteredComponents("layout").map(renderComponentCard) : renderEmptyState()} @@ -209,14 +209,12 @@ export function ComponentsPanel({ className }: ComponentsPanelProps) { {/* ๋„์›€๋ง */} -
-
- -
-

- ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ํ™”๋ฉด์— ์ถ”๊ฐ€ํ•˜์„ธ์š” -

-
+
+
+ +

+ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ํ™”๋ฉด์— ์ถ”๊ฐ€ํ•˜์„ธ์š” +

diff --git a/frontend/components/screen/panels/DetailSettingsPanel.tsx b/frontend/components/screen/panels/DetailSettingsPanel.tsx index c627a311..4ebd82c2 100644 --- a/frontend/components/screen/panels/DetailSettingsPanel.tsx +++ b/frontend/components/screen/panels/DetailSettingsPanel.tsx @@ -81,30 +81,30 @@ export const DetailSettingsPanel: React.FC = ({ return (
{/* ํ—ค๋” */} -
-
+
+
-

๋ ˆ์ด์•„์›ƒ ์„ค์ •

+

๋ ˆ์ด์•„์›ƒ ์„ค์ •

-
- ํƒ€์ž…: - +
+ ํƒ€์ž…: + {layoutComponent.layoutType}
-
ID: {layoutComponent.id}
+
ID: {layoutComponent.id}
{/* ๋ ˆ์ด์•„์›ƒ ์„ค์ • ์˜์—ญ */} -
+
{/* ๊ธฐ๋ณธ ์ •๋ณด */} -
- +
+ onUpdateProperty(layoutComponent.id, "label", e.target.value)} - className="focus:border-primary w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:ring-2 focus:ring-blue-500" + className="border-input bg-background focus-visible:ring-ring h-8 w-full rounded-md border px-3 text-xs focus-visible:ring-1 focus-visible:outline-none" placeholder="๋ ˆ์ด์•„์›ƒ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”" />
diff --git a/frontend/components/screen/panels/GridPanel.tsx b/frontend/components/screen/panels/GridPanel.tsx index 27cd2f6f..4df77897 100644 --- a/frontend/components/screen/panels/GridPanel.tsx +++ b/frontend/components/screen/panels/GridPanel.tsx @@ -55,44 +55,44 @@ export const GridPanel: React.FC = ({ return (
{/* ํ—ค๋” */} -
+
-
- -

๊ฒฉ์ž ์„ค์ •

+
+ +

๊ฒฉ์ž ์„ค์ •

-
+
{onForceGridUpdate && ( )} -
{/* ์ฃผ์š” ํ† ๊ธ€๋“ค */} -
+
-
+
{gridSettings.showGrid ? ( - + ) : ( - + )} -
@@ -104,9 +104,9 @@ export const GridPanel: React.FC = ({
-
- -
{/* ์„ค์ • ์˜์—ญ */} -
+
{/* ๊ฒฉ์ž ๊ตฌ์กฐ */} -
-

๊ฒฉ์ž ๊ตฌ์กฐ

+
+

๊ฒฉ์ž ๊ตฌ์กฐ

-
-